ディープ コピーは親オブジェクトを子オブジェクトにコピーすることであり、2 つのコピーのメモリとその後の操作は相互に影響しません。この記事では主に js のディープ コピーの例について説明します。これは、皆さんの役に立つことを願っています。
(1) 方法 1
function copy(obj1,obj2){ var obj2=obj2||{}; for(var name in obj1){ if(typeof obj1[name] === "object"){ //先判断一下obj[name]是不是一个对象 obj2[name]= (obj1[name].constructor===Array)?[]:{}; copy(obj1[name],obj2[name]); //然后来无限递归 }else{ obj2[name]=obj1[name]; //如果不是对象,直接赋值。 } } return obj2; }
使用法:
var obj1 = { se:[{a:1,b:2},{c:3}], sa:{a:"g"}, sc:function(){console.log(1)} }var n_obj = copy(obj1,{}) console.log(n_obj)
(2) 方法 2
function d_clone(obj) { return Object.getPrototypeOf(Object.create(obj)); }
使用方法:
var obj1 = { se:[{a:1,b:2},{c:3}], sa:{a:"g"}, sc:function(){console.log(1)} }var n2_obj = d_clone(obj1); console.log(n2_obj)
(3) 方法 3
JSON.parse(JSON.stringify(obj)
注: obj の属性には関数を含めることはできません。
(1) 方法 1
function copy(obj1,obj2){ var obj2=obj2||{}; for(var name in obj1){ if(typeof obj1[name] === "object"){ //先判断一下obj[name]是不是一个对象 obj2[name]= (obj1[name].constructor===Array)?[]:{}; copy(obj1[name],obj2[name]); //然后来无限递归 }else{ obj2[name]=obj1[name]; //如果不是对象,直接赋值。 } } return obj2; }
使用法:
var obj1 = { se:[{a:1,b:2},{c:3}], sa:{a:"g"}, sc:function(){console.log(1)} }var n_obj = copy(obj1,{}) console.log(n_obj)
(2) 方法 2
function d_clone(obj) { return Object.getPrototypeOf(Object.create(obj)); }
使用法:
var obj1 = { se:[{a:1,b:2},{c:3}], sa:{a:"g"}, sc:function(){console.log(1)} }var n2_obj = d_clone(obj1); console.log(n2_obj)
(3) 方法 3
JSON.parse(JSON.stringify(obj)
注: obj の属性には関数を含めることはできません。
関連する推奨事項:
関連する推奨事項:
JavaScript ディープ コピーのパフォーマンスについての深い理解
js のディープ コピーとシャロー コピーとは何か、およびそれらの実装方法
JavaScript のシャロー コピーとシャロー コピーの違いディープコピー
以上がjsディープコピーの例についてのディスカッションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。