2012-08-13 65 views
0
var myUser = (function() { 
    var username = "", 
    var isConnected = false; 
    return { 
     setUsername: function (n) { 
      username = n; 
     }, 
     setConn: function (connStatus) { 
      isConnected = connStatus; 
     }, 
     user: username, 
     isCon: isConnected 
    }; 
}()); 

Javascript对象方法不更新变量

有什么建议吗?

+0

可能只是一个错字,但缺少一个';在'变种的用户名'=“”'行......你试过'this.username = N'代替,所以你设置了对象自己的用户名成员,而不是一些随机变量的名称恰好相同? – 2012-08-13 02:08:32

+0

你的意思是喜欢它[被定义为开头](http://jsfiddle.net/userdude/e4Haf/)? – 2012-08-13 02:11:04

回答

3

它看起来像你想使用myUser.user指更新的用户名值。 但是,如果是这样的话,它不起作用。 setUsername更新用户名变量,但myUser.user只指向用户名的初始值,即“”。它不会指向更新后的用户名值

来解决这个问题,你可以改变

user: username, 

user: function() { 
    return username; 
}, 
+0

正确。对于提问者:请注意,根据相同的逻辑,连接获取器和设置器也必须重新设计。另外,'setConn'当前引入了一个全局变量'isConn'(typo?) – bfavaretto 2012-08-13 02:35:37

+0

是的,很抱歉,这是一个错字,我在这里复制粘贴时更改了变量名称。 – 2012-08-13 03:09:14

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' 
+0

什么是prop = prop || {}呢? – 2012-08-13 05:43:35

+1

它只是确保'prop'不是未定义的。这意味着_如果没有'道具',那就使用一个空的物体_ – elclanrs 2012-08-13 07:35:27

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

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

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