我知道再次閱讀這個話題真的很煩人,在開始編寫代碼之前,有一種解決方案可能是我沒有在JavaScript中獲得原型和對象,但是現在我認爲, 。克隆JavaScript對象。再次說明:(
的問題是:
如何克隆JavaScript類(與原型創建),以便擴展和事後執行時,「克隆」類保持不變
function clone(obj){
if(obj == null || typeof(obj) != 'object')
return obj;
var temp = new obj.constructor();
for(var key in obj)
temp[key] = clone(obj[key]);
return temp;
}
var FOO = function() {
var myBAR = clone(BAR);
myBAR.prototype = jQuery.extend(true, myBAR.prototype, this); // deep cloning twice and extending with this
console.log("FOO:", this.name);
new myBAR();
};
FOO.prototype = {
name: "FOO"
};
var BAR = function() {
console.log("BAR:", this.name);
};
BAR.prototype = {
name: "BAR"
};
new FOO(); // returns FOO: FOO and BAR: FOO
new BAR(); // returns BAR: FOO should return BAR: BAR
如果我」?我知道它是正確的,第二個電話new BAR()
(在new FOO()
之後)應該返回目前爲而不是BAR: FOO
。對於這個問題
一個可能的解決方案是clone
功能的一個東西完全重寫這樣的:
function clone(obj) {
return eval("("+obj.toString()+")"); // the same as eval(uneval(obj));
}
但這種方法有一個很大的弊端,不能傳遞任何動態創建的對象。
任何想法?
你是什麼意思的「動態創建的對象」? – 2009-07-23 07:19:59
想象一下,您在
FOO
內部創建了一個CAT
實例,並將其保存爲屬性,如this.cat = new CAT();
和CAT
類已創建並保存對DOM元素的引用。像this.myBody = $("body")
。 – 2009-07-23 07:33:31在你的克隆過程中,你想要複製什麼時候以及何時需要複製一個參考? – Rojo 2009-07-23 08:02:43