获取所有实例化的javascript对象并更新值

Getting all instantiated javascript objects and updating values

本文关键字:对象 更新 javascript 实例化 获取      更新时间:2023-09-26

下面是一个简化的对象示例。我想做的是当我调用update方法时,让它基于所有对象进行更新。所以,我需要以某种方式跟踪所有对象(我可以在这个游戏对象中这样做吗?或者我需要包装它吗?)

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()写入的数据具有更新的id 5,其中g2仍然具有名称为"firstname"的原始id 5。

非常感谢您的帮助!

编辑:只是想添加,我仍然希望有多个对象。并不是每个对象都有匹配的id。但如果他们这样做了,他们都应该更新。

您可以执行以下操作:

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
}

将代码更新为以下内容以获得所需结果:

        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);
            }
        };