2012-08-13 94 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") 
    }