2014-02-02 3 views
0

Я хочу нажать это значение на router.PORTS [i] .packetdata , но это не дает мне точного значения .. функция push также включает и дает мне неправильное значение .. Неверный код находится в строке 72.Javascript push не выводит правильное значение

но когда я попробовал 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'); 

ответ

0

Это выглядит как ошибка:

Device.prototype = { 
    // ... 
    packetdata: [] 
} 

Это создает единый массив, который будет назначен в качестве packetdata атрибута каждый раз, когда новый Device конкретизируется. Поэтому, когда вы изменяете один Devicepacketdata (если его атрибут packetdata не был переназначен), вы изменяете этот массив, который влияет на каждый Device.

Вы можете создать новый массив packetdata для каждого Device, создав его в конструкторе.

function Device(ip) { 
    this.ip = ip; 
    this.packetdata = []; 
} 

В качестве альтернативы вы можете использовать оригинальный протойпе, но обрабатывать массивы как неизменные значения. Таким образом, чтобы добавить пакетные данные в устройство, а мутирует массив

device.packetdata.push(message); 

вы могли бы передать его

device.packetdata = device.packetdata.concat(message); 

Но это было бы довольно нетипичный дизайн, так как большинство Java-программисты не думаю, что в термины неизменных структур данных.

Смежные вопросы