2016-07-05 2 views
0

죄송합니다. 정확히 무엇을 검색 할 지 확신하지 못했습니다. 나는 nodejs를 사용하는 webchat 서버를 가지고 있지만 플레이어 클래스를 만들었지 만 모든 사용자를 포함하는 player 배열로 플레이어 클래스를 푸시하고 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"를 유지하여 업데이트되도록 유지하는 것입니다.

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" 
관련 문제