Javascript对象方法不更新变量

Javascript对象方法不更新变量,javascript,Javascript,当我打电话时 var myUser = (function () { var username = "", var isConnected = false; return { setUsername: function (n) { username = n; }, setConn: function (connStatus) { isConnected = connStatus

当我打电话时

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");

使用原型模型可能更好:

myUser.setUsername("user123");

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

要解决此问题,您可以更改

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' 


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

要解决此问题,您可以更改

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' 

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

    ....
    },
    user: username,
    isCon: isConnected
user:username
强制计算
username
,返回“”。这更容易弄清楚发生了什么

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

可能只是一个输入错误,但缺少一个
var username=”“
行上。。。您是否尝试过使用
this.username=n
,因此您正在设置对象自己的用户名成员,而不是某个名称恰好相同的随机变量?您的意思是喜欢它?可能只是输入错误,但缺少一个
var username=”“
行上。。。您是否尝试过使用
this.username=n
,因此您正在设置对象自己的用户名成员,而不是某个名称恰好相同的随机变量?您的意思是喜欢它?完全正确。对于询问者:请注意,连接getter和setter也必须根据相同的逻辑进行修改。另外,
setConn
当前正在引入一个全局变量
isConn
(输入错误?)是的,对不起,这是一个输入错误,我在复制粘贴时更改了变量名称。完全正确。对于询问者:请注意,连接getter和setter也必须根据相同的逻辑进行修改。另外,
setConn
目前正在引入一个全局变量
isConn
(输入错误?)是的,对不起,这是输入错误,我在复制粘贴时更改了变量名称。prop=prop | |{}做什么?它只是确保
prop
没有未定义。这意味着如果没有
prop
则使用空对象prop=prop | |{}做什么?它只是确保
prop
没有未定义。这意味着如果没有
道具
,则使用空对象