javascript 딥 복사 의 원리 와 실현 방법 분석

본 논문 의 사례 는 자바 script 딥 복사 의 원리 와 실현 방법 을 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
자 바스 크 립 트 의 복사 본 을 이야기 하려 면 자 바스 크 립 트 의 값 전달 과 인용 전달 을 먼저 이야기 해 야 한다.
javascript 에 서 는 어떤 매개 변수 가 인용 전달 인지 규정 하 는 구체 적 인 문법 이 없 으 며,다른 언어 에 서 는 C\#의 ref 와 PHP 의&와 같은 명문 규정 이 있 습 니 다.
이것 도 자 바스 크 립 트 의 많은 폐단 중의 하나 다.
우 리 는 먼저 아래 의 이 코드 를 보 자.

//   
var i = 3;
var j = i;
j = 4;
document.write(i);//3
//    
var m = [1];
var n = m;
n[0] = 2;
document.write(n[0]);//2

이 는 자바 script 에서 간단 한 유형 만 값 전달 이 고 다른 복잡 한 유형,예 를 들 어 배열,대상 은 모두 기본 값 으로 전달 을 참조 하 는 것 임 을 나타 낸다.
그럼 우리 가 대상 을 복사 해 야 한다 면?방법 을 스스로 정의 해 야 합 니 다.

//      ,       
function cloneObject(srcobj){
  var tarobj=new Object();
  for(var key in srcobj){//            
    tarobj[key]=typeof srcobj[key]==='object'?cloneObject(srcobj[key]):srcobj[key];
  }
  return tarobj;
}
//           
//     :
var srcObj = {
  a: 1,
  b: {
    b1: ["hello", "hi"],
    b2: "JavaScript"
  }
};
var abObj = srcObj;//    
var tarObj = cloneObject(srcObj);
srcObj.a = 2;
srcObj.b.b1[0] = "Hello";
console.log(abObj.a);//2
console.log(abObj.b.b1[0]);//Hello,     =       
console.log(tarObj.a);   // 1
console.log(tarObj.b.b1[0]);  // "hello",              

사실은 새로운 대상 을 실례 화하 여 더미 속 에 새로운 메모리 공간 을 열 어 창고 안의 변수 이름 이 더미 속 의 새로운 내용 을 가리 키 게 하 는 것 이다.
자 바스 크 립 트 관련 내용 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 자 바스 크 립 트 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기