我看了四周,發現沒有什麼可以幫助我。爲什麼地球上不能克隆一個JavaScript對象與私人成員沒有讓他們糾纏在一起?複製javascript對象與私人會員
看看這個代碼...這是一個普通的私有財產與getter和setter。 不知何故,如果我在一個實例中調用公共setter,克隆的也會發生變化。爲什麼?它可以解決嗎?
obj = function(){
var changed = 0;
this.getChanged = function(){
return changed;
}
this.setChanged = function(){
changed = 1;
}
this.setUnchanged = function(){
changed = 0;
}
};
myObj = new obj();
copiedObj = $.extend(true, {}, myObj); // Or any other deep copy function you'd have around
myObj.setChanged();
myObj.getChanged(); // returns 1
copiedObj.getChanged(); // returns 1!
copiedObj.setUnchanged();
copiedObj.getChanged(); // returns 0
myObj.getChanged(); // returns 0
感謝您的任何想法。
編輯:到目前爲止,沒有什麼新的。我知道JavaScript並沒有像Java或C++這樣的OO,但是我們談論的是編程語言,總是有一條出路。有時它很醜,但有一個。
我明白了。 溶液A:只是使它this.changed代替VAR改變
解決方案B:使,重建整個對象重新
我只是希望會有一些C液那會我自己的克隆功能把javascript轉化爲標準的面向對象的模式。
有人,我真的堅持A或B嗎?
請記住,您實際上並沒有使用此方法克隆** changed **變量的值。如果這是一項要求,則需要一個特定於您的obj「類」的克隆方法,該方法使用** getChanged **/** setChanged **傳輸該值。 – 2010-10-14 17:22:51
是的。在我的情況下,更改的變量是特定於實例,並在構造函數中有一個默認值。我不希望被複制,所以沒關係。謝謝。 – 2010-10-14 17:41:37