전단 (1) js 개체 클론

1598 단어 전단
js 의 대상 은 인용 유형 이라는 것 을 잘 알 고 있 습 니 다. 만약 에 var obj 2 = obj, obj 2 와 obj 가 같은 대상 의 실 체 를 공유 하 는 것 이 라면 이것 은 우리 가 원 하 는 결과 가 아 닙 니 다.
공식 적 으로 통용 되 는 대상 복제 방법 을 제시 하지 않 았 다.
우 리 는 다음 과 같은 몇 가지 방법 을 제시한다.
1. 공통 대상 복제:
function clone(obj){
    let temp = null;
    if(obj instanceof Array){
        temp = obj.concat();
    }else if(obj instanceof Function){
        //           ,js                    
        temp = obj;
    }else{
        temp = new Object();
        for(let item in obj){
            let val = obj[item];
            temp[item] = typeof val == 'object'?clone(val):val; //            ,      ,            
        }
    }
    return temp;
}

전체 clone 함수 의 생각 이 좀 어 지 러 울 수 있 지만 이렇게 정리 할 수 있 습 니 다.
obj 의 value 를 일반 값, 배열, 함수 만 있 는 것 으로 생각 하고 순서대로 처리 한 다음 에 이전의 '일반 값' 이 object 일 수 있 으 므 로 여기 서 판단 을 하고 clone 함 수 를 재 귀 하면 됩 니 다.
ps: 주의해 야 할 것 은 정부 에서 새로운 함수 인 스 턴 스 를 생 성 할 수 있 는 방법 이 있 습 니 다. 바로 bid () 입 니 다.
function aaa(){
    console.log(this);
};

var c = aaa;
var d = aaa.bind(); //bind      ,   window  

c === aaa; //true
d === aaa; //false

2. JSON 대상 서열 화 방법
이 방법 은 분명히 훨씬 간단 하지만, 단점 이 하나 있 는데, 바로 함 수 를 복제 할 수 없다 는 것 이다.
var obj = {a:1,b:2}  
var newObj = JSON.parse(JSON.stringify(obj)); 

3. dom 요소 의 복사 - cloneNode
let div = document.getElementById('box');
let box2 = div.cloneNode(true);

4. es6 새로운 방법 - Object. assign
var obj = {a:1,b:2}  
var newObj = Object.assign({}, obj); 

좋은 웹페이지 즐겨찾기