Получение всех экземпляров объектов javascript и обновление значений - PullRequest
0 голосов
/ 28 марта 2012

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

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'.

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

РЕДАКТИРОВАТЬ: Просто хотел добавить, я все еще хотел бы, чтобы было несколько объектов.Не всегда каждый объект будет иметь соответствующие идентификаторы.Но если они это сделают, они все должны обновить.

Ответы [ 2 ]

0 голосов
/ 28 марта 2012

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

        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);
            }
        };
0 голосов
/ 28 марта 2012

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

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
}
...