いつ始まったのかわかりませんが、フロントエンドの円:オブジェクト深度クローンに新しい単語が表示されました。非常に背が高く見えますが、実際には新しいものではありません。あなたは私たちの実際のプロジェクト開発でそれを使用したかもしれませんが、漢字の深刻さのために、一見プロフェッショナルな語彙によってわずかに修正されて、元々単純なものも神秘的になります。
まず第一に、なぜオブジェクトを深くクローンする必要があるのですか?推測をさせてください:JSの組み込みオブジェクトドキュメントが長すぎると思うことがあります。
コードコピーは次のとおりです。
var d = document;
d.by = function(id){
D.GetElementByID(ID)を返します。
};
d.by( 'id')。innerhtml = 'hello sentsin';
上記のコードは、document.getElementByIDを簡素化し、元のドキュメントオブジェクトにメンバーのメソッドを追加します。 document.hasownproperty( 'by')によって返されたステータス値を使用して、判断を確認できます。次の例を見てみましょう。
コードコピーは次のとおりです。
var person = {name: 'xianxin'、職業: 'フロントエンド開発'、場所: 'hangzhou'};
var newperson = person;
newPerson.age = '24';
console.log(person);
// result:{name: 'xianxin'、職業: 'フロントエンド開発'、場所: 'hangzhou'、age:24}
オブジェクトが単に新しい変数に渡される場合、それは単にオブジェクトのエイリアスであることがわかります。これは、元のオブジェクトキー値がエイリアスの操作を通じて変更されることを意味します。しかし、問題は、ニューパーソンが完全に人から独立していることを望み、お互いの間に同期関係がないことがあるので、コピーを生成する必要があることです。例を参照してください。
コードコピーは次のとおりです。
var cloneobj = function(obj){
var str、newobj = obj.constructor === array? []:{};
if(typeof obj!== 'object'){
戻る;
} else if(window.json){
str = json.stringify(obj)、//シリアル化オブジェクト
newobj = json.parse(str); //復元する
} それ以外 {
for(bar i in obj){
newobj [i] = typeof obj [i] === 'object'?
cloneobj(obj [i]):obj [i];
}
}
Newobjを返します。
};
//テスト
var obj = {a:0、b:1、c:2};
var arr = [0、1、2];
//ディープクローニングを実行します
var newobj = cloneobj(obj);
var newarr = cloneobj(arr);
//クローン化された新しいオブジェクトのメンバー削除を削除します
newobj.aを削除します。
newarr.splice(0,1);
console.log(obj、arr、newobj、newarr);
// result:{a:0、b:1、c:2}、[0、1、2]、{b:1、c:2}、[1、2];
これはいわゆるオブジェクトのクローニングです。しかし、説明する必要があることがいくつかあります。 JSONオブジェクトとそのメンバーメソッドは、コード内のStringifyと解析をECMAScript5仕様に属します。オブジェクト(配列オブジェクトを含む)を文字列に変換し、それらを復元する責任があり、それによりオブジェクトの深いコピーを実現します。したがって、低レベルのブラウザー(IEなど)の場合、配列をコピーすると、newobj.concat(obj)を使用でき、通常のオブジェクトは単に値を列挙して割り当てることができます。