JavaScriptのクローン
2749 ワード
JavaScriptはどのようにオブジェクトの属性と方法を完全に別の空のオブジェクトに運んできたのですか?継承の使い方は上記の操作ができないので、もう一つの方法であるクローンを開始します.
クローンは浅いクローンと深さクローンに分けられます.
浅いクローン
深さクローン
深さクローンはいくつかのアルゴリズムを再帰的に運用しています.まず深さクローンを行う前に、深さクローンのコードの考え方を理解すればいいです.
1.クローンの過程で私たちはオブジェクトを遍歴する方法を使って、まず遍歴中のハスOwnProperty()方法で属性と方法を判断します.対象自体ですか?それとも原型中ですか?話が分かりません.ここをクリックします.
2.対象には引用値があり、まずは引用値であるかどうかを判断し、タイプ変換の知識を活用する.
3.配列かオブジェクトかを判断する
4.対応する配列またはオブジェクトを作成する
5.再帰
6.再帰的終了条件
7.戻り値
上のこれらのステップについて、できるだけ自分のプログラミング思想で先に書きます.ここは簡単に書きます.
JavaScript言語は個人的に一番面白いと思います.私も初心者です.問題があったら、ブログで共有するのが好きです.
皆さんにも助けてあげたいです.
初心者で、何か足りないところやミスがあったら、下にコメントして、お互いに勉強して、一緒に進歩したいです.
--ホームページ転送ゲート--
クローンは浅いクローンと深さクローンに分けられます.
浅いクローン
var obj = {
name : "wang",
age : 20,
say : [1,2,3],
family : {
name :"zhou",
baobao : {
name : "mmm",
}
}
test : function (){
console.log(this.name);
}
}
function alone(Origin,Target){
var Target = Target || {};//
for(var prop in Origin){
Target[prop] = Origin[prop];
}
return Target;
}
var obj1 = alone(obj);
浅いクローンはオブジェクトの属性と方法をクローンして、オブジェクト遍歴の方法を使って、ここをクリックすることが分かりません. 元の値は参照値と同じです.したがって、クローンされた参照値と元のオブジェクトの参照値が同じ方向に向けられ、一方が変更されることになります.したがって、次の深さクローンの方法があります.深さクローン
深さクローンはいくつかのアルゴリズムを再帰的に運用しています.まず深さクローンを行う前に、深さクローンのコードの考え方を理解すればいいです.
1.クローンの過程で私たちはオブジェクトを遍歴する方法を使って、まず遍歴中のハスOwnProperty()方法で属性と方法を判断します.対象自体ですか?それとも原型中ですか?話が分かりません.ここをクリックします.
2.対象には引用値があり、まずは引用値であるかどうかを判断し、タイプ変換の知識を活用する.
3.配列かオブジェクトかを判断する
4.対応する配列またはオブジェクトを作成する
5.再帰
6.再帰的終了条件
7.戻り値
上のこれらのステップについて、できるだけ自分のプログラミング思想で先に書きます.ここは簡単に書きます.
var obj = {
name : "wang",
age : 20,
say : [1,2,3],
family : {
name :"zhou",
baobao : {
name : "mmm",
}
}
test : function (){
console.log(this.name);
}
}
function deepAlone(Origin,Target){
var Target = Target || {}; //
var toStr = Object.prototype.toString; //
var arrStr = '[object Array]'; //
for(var prop in Origin){ //
if(Origin.hasOwnProperty(prop)){ //
if(Origin[prop] !== 'null' && typeof(Origin[prop]) == 'object'){ //
Target[prop] = toStr.call(Origin[prop]) == arrStr ? [] : {}; // : :
deepAlone(Origin[prop],Target[prop]); //
}
else{
Target[prop] = Origin[prop]; //
}
}
}
return Targin; // 。
}
var obj1 = deepAlone(obj);
JavaScript言語は個人的に一番面白いと思います.私も初心者です.問題があったら、ブログで共有するのが好きです.
皆さんにも助けてあげたいです.
初心者で、何か足りないところやミスがあったら、下にコメントして、お互いに勉強して、一緒に進歩したいです.
--ホームページ転送ゲート--