ホームページ  >  記事  >  ウェブフロントエンド  >  jsディープコピーの例についてのディスカッション

jsディープコピーの例についてのディスカッション

小云云
小云云オリジナル
2018-03-06 14:15:431430ブラウズ

ディープ コピーは親オブジェクトを子オブジェクトにコピーすることであり、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。