Javascript对象方法不更新变量

时间:2012-08-13 02:05:29

标签: javascript

var myUser = (function () {
    var username = "",
    var isConnected = false;
    return {
        setUsername: function (n) {
            username = n;
        },
        setConn: function (connStatus) {
            isConnected = connStatus;
        },
        user: username,
        isCon: isConnected
    };
}());

当我打电话

myUser.setUsername("user123");

用户名变量未更新。

有什么建议吗?

3 个答案:

答案 0 :(得分:3)

看起来您想使用myUser.user来引用更新的用户名值。 但是,如果是这种情况,它就不起作用。 setUsername更新用户名变量,但myUser.user仅指向用户名的初始值,即“”。它不会指向更新的用户名值

要解决问题,您可以更改

user: username,

user: function() {
    return username;
},

答案 1 :(得分:1)

这可能是使用原型模型的更好案例:

function User(prop) {
  prop = prop || {};
  this.username = prop.username || '';
  this.isConnected = prop.isConnected || false;
}
User.prototype = {
  setUser: function(uname) { this.username = uname; },
  setConn: function(status) { this.isConnected = status; }
};

var myUser = new User();
myUser.setUser('user1234');
// OR
var myUser = new User({ username: 'user1234' });

console.log(myUser.username); //=> 'user1234' 

答案 2 :(得分:0)

    ....
    },
    user: username,
    isCon: isConnected

user: username强制评估username,返回“”。这更容易弄清楚发生了什么

   var obj = {
        log: console.log("printed when init")
   }