Object. assign 의 용법 과 주의 점

1961 단어 자바 script
Object. assign 은 대상 의 합병 을 실현 할 수 있 습 니 다.그것 의 문법 은 다음 과 같다.
4. 567914. source 에 있 는 매 거 진 속성 을 4. 567914 로 복사 합 니 다.target 의 기 존 속성 과 이름 을 바 꾸 면 덮어 씁 니 다.동시에 후속 source 는 앞의 source 의 동명 속성 을 덮어 씁 니 다.
⚠️Object. assign 은 속성 값 을 복 사 했 습 니 다. 속성 값 이 참조 형식 이 라면 복 사 된 것 은 참조 주소 이 고 인용 공유 문제 가 존재 합 니 다.
예 를 들 어 설명:
const o1 = { name: 'fedaily' }
const o2 = { topic: ['react', 'nodejs'] }
const o3 = Object.assign({}, o1, o2)

// o3 { name: 'fedaily', topic: ['react', 'nodejs'] }
o3.topic.push('css')

// o3 { name: 'fedaily', topic: ['react', 'nodejs', 'css'] }
// o2 { topic: ['react', 'nodejs', 'css'] }
// ⚠️           topic      

따라서 Object. assign 을 즐겁게 사용 하려 면 인용 유형 이 있 는 지 에 대한 특별한 관심 이 필요 합 니 다.
만약 우리 가 인용 유형 을 처리 해 야 한다 면 어떻게 해 야 합 니까? 이것 은 대상 의 복사 와 관련 이 있 습 니 다. lodash 의 를 참고 하 십시오.clone, _clone Deep 등의 방법.
그리고 MDN Object. assign 에 관 한 poly fill 을 첨부 하여 내부 실현 을 이해 하 는 동시에 이 방법 을 잘 파악 할 수 있 습 니 다.
if (typeof Object.assign != 'function') {
  Object.assign = function (target, varArgs) { // .length of function is 2
    'use strict';
    if (target == null) { // TypeError if undefined or null
      throw new TypeError('Cannot convert undefined or null to object');
    }

    var to = Object(target);

    for (var index = 1; index < arguments.length; index++) {
      var nextSource = arguments[index];

      if (nextSource != null) { // Skip over if undefined or null
        for (var nextKey in nextSource) {
          // Avoid bugs when hasOwnProperty is shadowed
          if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
            to[nextKey] = nextSource[nextKey];
          }
        }
      }
    }
    return to;
  };
}

전단 수집가 (마이크로 신호: fedaily) 는 전 네트워크 의 우수한 전단 기술 정 보 를 수집 하여 당신 과 공유 하고 함께 성장 합 니 다.

좋은 웹페이지 즐겨찾기