JS 얕 은 복사 와 깊 은 복사

1463 단어
1. 얕 은 복사 (인용 형식의 복 제 는 모두 얕 은 복사)
var arr1 = [1,2,3,4];
arr2 = arr1;
arr2.push(5);
console.log(arr1);//[1,2,3,4,5]

2. 대상 의 얕 은 복사
function copy(obj){
  var tempObj = {};
  for(var i in obj){
    tempObj[i] = obj[i]; //    
  }
  return tempObj
}
var Person = {
  name:'person',
  skills:['g','s','m']
}
var newPerson = copy(Person);
console.log(Person.skills ) ;//['g','s','m'];
newPerson.skills.push('b');
console.log(Person.skills); // ['g','s','m','b'];    ,              
console.log(newPerson .skills); // ['g','s','m','b']; 

2. 대상 의 깊 은 복사 (얕 은 복사 에 재 귀적 호출)
function deepCopy(obj, newObj) {
  var tempObj= newObj || {};
  for (var i in obj) {
    if (typeof obj[i] === 'object') {
      tempObj[i] = (obj[i].constructor === Array) ? [] : {};
      deepCopy(obj[i], tempObj[i]);
    } else {
      tempObj[i] = obj[i];
    }
  }
  return tempObj;
};
var Person = {
  name:'person',
  skills:['g','s','m']
}
var newPerson = deepCopy(Person);
console.log(Person.skills ) ;//['g','s','m'];
newPerson.skills.push('b');
console.log(Person.skills); // ['g','s','m']; 
console.log(newPerson .skills); // ['g','s','m','b']; 

좋은 웹페이지 즐겨찾기