2016-07-05 28 views
0

对不起,不知道究竟要搜索什么,因为我敢肯定这已经回答过,但在这里。我有一个使用nodejs的网聊服务器,我做了一个播放器类,但是如果我将播放器类推送到包含所有用户的播放器数组并更新播放器类(如player.id),则这些更改不会出现在播放器数组中。我该如何解决这个问题?如何保持用户阵列与用户更新

var User = require('./User.js'); 



var wsID = 1; // should be random just for this example 

var USERS = {}; 

    USERS[wsID] = { 
    socket: "", 
    clientDetails: { 
     username: "", 
     isGuest: "" 
    } 
    } 
user = new User(); 
user.setUsername("test"); 
USERS[wsID].username = user.getUsername; // works perfectly 
user.setUsername("updatedit"); // fails to update array 
console.log(USERS[wsID].username); // returns test and not updatedit... 

类文件:

var wsId, 
     socket, 
    username, 
isGuest; 

function User() { 

} 

    User.prototype.getUsername = function(){ 
    return this.username; 
    } 

    User.prototype.setUsername = function(name){ 
    this.username = name; 
    } 
module.exports = User; 

回答

0

你缺少的参考,当你这样做:

USERS[wsID].username = user.getUsername; 

那是因为你是克隆属性的当前值到另一个对象。解决此问题的一种方法是更改​​代码,以便在“clientDetails”中携带实例“用户”,以便保持更新:

user = new User(); 
user.setUsername("test"); 
USERS[wsID].clientDetails = user; // carry the entire instance 
user.setUsername("updatedit"); 
console.log(USERS[wsID].clientDetails.username); // should return "updatedit"