このトピックをもう一度読むのは本当に面倒です。コードを読み込む前に、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
i」は場合は?それが正しいのですが、new BAR()
(new FOO()
の後)の2番目の呼び出しは、 n BAR: BAR
ではありません。現時点ではBAR: FOO
です。この問題の
一つの可能な解決策は、このようなものでclone
機能を完全に書き直したものです:
function clone(obj) {
return eval("("+obj.toString()+")"); // the same as eval(uneval(obj));
}
しかし、このアプローチは、BIG欠点を持っている、あなたは、任意の動的に作成されたオブジェクトを渡すことはできません。
アイデア?
「動的に作成されるオブジェクト」とはどういう意味ですか? –
FOO
の内部にCAT
のインスタンスを作成し、this.cat = new CAT();
のようにCATをプロパティとして保存し、CAT
クラスがDOM要素への参照を作成して保存したとします。this.myBody = $("body")
のように。 –クローニングプロセスで、いつコピーしたいのですが、いつ参照をコピーしますか? – Rojo