2010-09-14 218 views
2

我現在設立類似下面非靜態私有變量

Object1 = function() { 
    var privateMember = "private value" 

    return { 
    publicMember: "public value" 
    setPrivateMember: function(value) { 
     privateMember = value; 
    } 
    } 
}(); 

我的JavaScript對象,如果我使用原型繼承來創建新的對象

Object2.prototype = Object1 

然後設置專用成員

Object2.setPrivateMember("new value"); 

然後,對象1中的私有成員的值也發生變化,所以它的行爲更像一個sta抽動變量。有沒有辦法讓私有變量不是靜態的?

PS - 我是一名自學成才的程序員,所以我對術語的使用可能有點粗略。讓我知道是否需要澄清

+1

應該使用'Object2.prototype = Object1()'或這只是粘貼代碼中的一個錯字嗎? – MooGoo 2010-09-14 14:35:37

+0

[繼承原型中的私有變量]的可能重複(http://stackoverflow.com/questions/3617139/private-variables-in-inherited-prototypes) – 2010-09-14 14:47:47

回答

2

您正在創建一個全局變量。把var放在它之前。

var privateMember = "private value";
+1

這是我的問題中的一個錯字。問題仍然發生,即使當我使用var – wheresrhys 2010-09-14 14:29:50

2

編輯我的答案,你可以檢查這是否工作?

試試這個 -

Object1 = function() { 
    var privateMember = "private value"; 

    var returnVal = { 
       publicMember: "public value", 
       setPrivateMember: function(value) { 
       privateMember = value; 
       } 

      }; 
    return returnVal; 
}();