>  기사  >  웹 프론트엔드  >  js 딥 카피 예시에 대한 토론

js 딥 카피 예시에 대한 토론

小云云
小云云원래의
2018-03-06 14:15:431430검색

Deep Copy는 상위 개체를 하위 개체에 복사하는 것이며, 두 복사본의 메모리 및 후속 작업은 서로 영향을 미치지 않습니다. 이 기사에서는 모든 사람에게 도움이 되기를 바라며 주로 JS Deep Copy 예제에 대한 논의를 공유합니다.

(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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.