2012-03-28 4 views
0

Вот упрощенный пример объекта, который у меня есть. То, что я хотел бы сделать, - это когда я вызываю метод обновления, чтобы он обновлялся на основе всех объектов. Таким образом, я должен буду следить за всеми объектами как-то (я могу это сделать в рамках этого игрового объекта? Или мне нужно обернуть это?)Получение всех экземпляров объектов javascript и значений обновления

var Game = function() { 
    this.data  = []; 
} 

Game.prototype = { 

    add: function(game) { 
     this.data.push(game); 
    }, 
    update: function(game) { 
     for(i = 0; i < this.data.length; i++) { 
      if(this.data[i].id == game.id) { 
       this.data[i].name = game.name; 
      } 
     } 
    }, 
    get: function() { 
     console.log(this.data); 
    } 
} 


var g1 = new Game; 
g1.add({id: '5', name: 'firstname'}); 
g1.add({id: '6', name: 'secondname'}); 

var g2 = new Game; 
g2.add({id: '5', name: 'firstname'}); 
g2.add({id: '6', name: 'secondname'}); 

g1.update({id: '5', name: 'firstname-updated'}) 

g1.get(); 
g2.get(); 

В принципе, если вы запустите это, вы увидите, что g1.get() записывает данные с обновленным идентификатором 5, где в качестве g2 все равно будет иметь исходный идентификатор 5 с именем «firstname».

Большое спасибо за помощь!

EDIT: Просто хотел добавить, я все равно хочу, чтобы там было несколько объектов. Не всегда, каждый объект будет иметь соответствующие идентификаторы. Но если они это сделают, они должны все обновиться.

ответ

0

Вы могли бы сделать что-то вроде:

function Game() { 
    this.data = []; 
} 

// Object to store games with the same id 
Game.games = {}; 

Game.prototype.add = function(game) { 

    // Add the game to the existing array with same id 
    if (Game.games[game.id]) { 
    Game.games[game.id].push(game); 

    // Or create new array if first with this id 
    } else { 
    Game.games[game.id] = [game]; 
    } 
    // other stuff 
} 

// Update all games with same id 
Game.prototype.update = function(game) { 
    var games = Game.games[game.id] 
    // games is a reference to an array of all the games with the same id 
} 
0

обновить свой код, чтобы следующий, чтобы получить желаемый результат:

 var Game = function() { 
      //this.data  = []; 
     } 

     Game.prototype = { 

      data : [], 

      add: function(game) { 
       var found = false; 
       for(i = 0; i < this.data.length; i++) { 
        if(this.data[i].id == game.id) { 
         found = true; 
         break; 
        } 
       } 
       if(!found) { 
        this.data.push(game); 
       } 
      }, 
      update: function(game) { 
       for(i = 0; i < this.data.length; i++) { 
        if(this.data[i].id == game.id) { 
         this.data[i].name = game.name; 
        } 
       } 
      }, 
      get: function() { 
       console.log(this.data); 
      } 
     }; 
Смежные вопросы