Javascript推送未输出正确的值

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

我想将此值推送到router.PORTS[I].packetdata 但这并没有给我确切的价值。。推送功能也可以循环 给我一个错误的值。。 第72行有错误的代码

但是当我试着 router.PORTS[i].packetdata=message; 第72行。 该值是正确的,但不会推送到数组中

            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程序员不会以不变的数据结构来思考