2016-07-05 62 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"