Javascript推送未输出正确的值
我想将此值推送到router.PORTS[I].packetdata 但这并没有给我确切的价值。。推送功能也可以循环 给我一个错误的值。。 第72行有错误的代码 但是当我试着 router.PORTS[i].packetdata=message; 第72行。 该值是正确的,但不会推送到数组中Javascript推送未输出正确的值,javascript,arrays,push,Javascript,Arrays,Push,我想将此值推送到router.PORTS[I].packetdata 但这并没有给我确切的价值。。推送功能也可以循环 给我一个错误的值。。 第72行有错误的代码 但是当我试着 router.PORTS[i].packetdata=message; 第72行。 该值是正确的,但不会推送到数组中 function Router(PORTS){ rex = this; } Router.proto
function Router(PORTS){
rex = this;
}
Router.prototype = {
"PORTS": [],
connect: function(devicename,PORT){
devicename.PORT = PORT;
this.PORTS.push(devicename);
},
totalPackets: function(PORT){
if(PORT){
for (var i=0;i<rex.PORTS.length;i++)
{
if(rex.PORTS[i].PORT == PORT){
console.log('total packets by PORT', rex.PORTS[i])
}
}
}else{
return rex.packetdata.length;
}
},
totalBytes: function(){
totalBytes = [];
result = 0;
for (var i=0;i<rex.packetdata.length;i++)
{
totalBytes.push(rex.packetdata[i].message.length)
}
for (var i = 0; i< totalBytes.length; i++) {
result += totalBytes[i];
}
return result;
},
packetdata: []
}
function Device(ip){
this.ip = ip;
}
Device.prototype = {
DeviceName: "",
IP: this.ip,
PORT: "",
data:[],
incomingBuffer: "",
totalPackets:"",
totalBytes:"",
emit: function(data,packets){
rex.packetdata.push(packets);
},
packetdata: []
}
function Packet(ip,message) {
this.ip = ip;
this.message = message;
for (var i=0;i<rex.PORTS.length;i++)
{
if(router.PORTS[i]['ip'] == ip){
router.PORTS[i].incomingBuffer = router.PORTS[i].incomingBuffer + this.message;
// I want to push this value to router.PORTS[i].packetdata
// my code router.PORTS[i].packetdata.push(message);
router.PORTS[i].packetdata = message;
console.log(ip, router.PORTS[i].ip);
}
else{
//console.log('invalid')
}
}
}
Packet.prototype = {
ip: this.ip,
message: this.message
};
router = new Router(['WAN', 'LAN1', 'LAN2']);
device1 = new Device('192.168.0.1');
router.connect(device1, 'LAN1');
device2 = new Device('192.168.0.10');
router.connect(device2, 'LAN2');
wan = new Device('62.88.120.10');
router.connect(wan, 'WAN');
wan.emit('data', new Packet('192.168.0.1', 'Hello '));
wan.emit('data', new Packet('192.168.0.10', 'Hi,'));
wan.emit('data', new Packet('192.168.0.10', ' guys'));
wan.emit('data', new Packet('192.168.0.1', 'world!'));
wan.emit('data', new Packet('192.168.0.1', 'shit!'));
router.totalPackets();
router.totalBytes();
router.totalPackets('LAN1');
功能路由器(端口){
雷克斯=这个;
}
Router.prototype={
“港口”:[],
连接:功能(devicename,端口){
devicename.PORT=端口;
此.PORTS.push(devicename);
},
totalPackets:函数(端口){
如果(端口){
对于(var i=0;i而言,这似乎是一个错误:
Device.prototype = {
// ...
packetdata: []
}
这将创建一个数组,该数组将在每次实例化新的设备时被指定为packetdata
属性。因此,当您修改一个设备的packetdata
时(除非其packetdata
属性已被重新指定),您正在修改一个数组,它会影响每个设备
您可以通过在构造函数中创建一个新的packetdata
数组来为每个设备创建一个数组
function Device(ip) {
this.ip = ip;
this.packetdata = [];
}
或者,您可以坚持使用原始的原型,但将数组视为不可变的值
device.packetdata.push(message);
你可以重新分配它
device.packetdata = device.packetdata.concat(message);
但这将是一个相当非典型的设计,因为大多数javascript程序员不会以不变的数据结构来思考