1

つまり、nodejsで使用しているオブジェクトがあります。それはそのように見えます:

for(var i = 0; i < x.length; i++) {
            var sUser = x[i];
            mUsers[sUser.userid] = CreateUser(sUser);
            ++mUsers.length;
        }

だから私は外部ソースから情報を引き出しています、そしてそれはこれのインスタンスでいっぱいの配列として分解します:

[{ name: 'Michael Lovesllamas Lankford',
 created: 1338420951.11,
 laptop: 'pc',
 laptop_version: null,
 userid: '4fc6aed7eb35c14ad6000057',
 acl: 0,
 fans: 1,
 points: 5,
 avatarid: 34 }]

などなど。

上記の関数で情報がxとして渡されるようにします。

global.mUsers = {length:0}

global.UserBase = {
    userid: -1,
    name: "noidea",
    isSuperUser: false,
    isDJ: false,
    laptop: "pc" };

process.on("registered", OnRegistered);

global.OnRegistered = function(a) {
        //misc code here
        RegisterUsers(a.users);
        //misc code here
}

global.CreateUser = function(a) {
    var b = UserBase;
    b.userid = a.userid;
    b.name = a.name;
    b.laptop = a.laptop;
    if (a.acl > 0) b.isSuperUser = true;
    return b;
};

global.RegisterUsers = function(x) {
        for(var i = 0; i < x.length; i++) {
            var sUser = x[i];
            mUsers[sUser.userid] = sUser;
            ++mUsers.length;
        }

}

今、私はそれをループに記録しました、そしてmUsers[sUser.userid]は確かに=sUserをします。しかし、ループの直後にconsole.log(mUsers)を実行すると、次のようになります。

{ 
 userid1: { userid: userid3, name: name3, item: item3 },
 userid2: { userid: userid3, name: name3, item: item3 },
 userid3: { userid: userid3, name: name3, item: item3 }
}

そして、なぜそれが上書きされているのかわかりません。何か案は?

4

2 に答える 2

2

主な問題は、CreateUserを呼び出すときに同じオブジェクトを継続的に参照する場合、すべての呼び出しを通じて保持されていた参照を更新して返すだけであるということです。これが、印刷するときに印刷された理由です。最後の更新。オブジェクトのコピーを作成する必要があります。

global.CreateUser = function(a) {
    var b = Object.create(UserBase); // this will create a copy of it.
    b.userid = a.userid;
    b.name = a.name;
    b.laptop = a.laptop;
    if (a.acl > 0) b.isSuperUser = true;
    return b;
};

現在、CreateUserは実際にコピーを作成しています。プロパティを確認すると、デフォルトのプロパティがすぐに表示されない場合がありますが、まだそこにあり、単に移動されただけで、それらを__proto__呼び出すことができます。

于 2012-06-19T06:50:47.637 に答える
0

以下を試してみてくださいそれは私のために働いています

var obj = {
            userid1: { userid: "userid1", name: "name3", item: "item3" },
            userid2: { userid: "userid2", name: "name3", item: "item3" },
            userid3: { userid: "userid3", name: "name3", item: "item3" }
        };

var muser = {};

for (var key in obj) {
    muser[key] = obj[key];
}
于 2012-06-19T05:53:35.037 に答える