본 튜토리얼은 전 세계 사람들이 이용할 수 있는 오픈 소스 프로젝트입니다. 프로젝트 페이지에 방문하셔서 번역을 도와주세요.
돌아가기

'prototype' 변경하기

중요도: 5

아래 코드에선 new Rabbit를 만들고 Rabbit"prototype"을 변경합니다.

시작 코드는 다음과 같습니다.

function Rabbit() {}
Rabbit.prototype = {
  eats: true
};

let rabbit = new Rabbit();

alert( rabbit.eats ); // true
  1. 아래와 같은 코드를 추가(강조된 줄)하면 얼럿창엔 무엇이 출력될까요?

    function Rabbit() {}
    Rabbit.prototype = {
      eats: true
    };
    
    let rabbit = new Rabbit();
    
    Rabbit.prototype = {};
    
    alert( rabbit.eats ); // ?
  2. 아래와 같이 코드를 변경하면 얼럿창엔 무엇이 출력될까요?

    function Rabbit() {}
    Rabbit.prototype = {
      eats: true
    };
    
    let rabbit = new Rabbit();
    
    Rabbit.prototype.eats = false;
    
    alert( rabbit.eats ); // ?
  3. 아래와 같이 delete를 사용하면 얼럿창엔 무엇이 출력될까요?

    function Rabbit() {}
    Rabbit.prototype = {
      eats: true
    };
    
    let rabbit = new Rabbit();
    
    delete rabbit.eats;
    
    alert( rabbit.eats ); // ?
  4. 마지막 코드를 실행하면 얼럿창엔 무엇이 출력될까요?

    function Rabbit() {}
    Rabbit.prototype = {
      eats: true
    };
    
    let rabbit = new Rabbit();
    
    delete Rabbit.prototype.eats;
    
    alert( rabbit.eats ); // ?

정답:

  1. true

    Rabbit.prototype에 무언가를 할당하면 그 값이 새로운 객체의 [[Prototype]]이 됩니다. 다만 이미 만들어진 객체엔 이 규칙이 적용되지 않습니다.

  2. false

    객체는 참조에 의해 할당됩니다. Rabbit.prototype이 참조하는 객체는 단 하나뿐인데, 이 객체는 Rabbit.prototyperabbit[[Prototype]]을 사용해 참조할 수 있습니다.

    따라서 둘 중 하나의 참조를 사용해 객체의 내용을 변경하면 다른 참조를 통해서도 변경 내용을 볼 수 있습니다.

  3. true

    delete 연산은 객체에 직접 적용됩니다. delete rabbit.eatsrabbit에서 eats 프로퍼티를 제거하는데, rabbiteats가 없습니다. 따라서 delete는 아무런 영향을 주지 않습니다.

  4. undefined

    프로퍼티 eats가 프로토타입에서 삭제되었기 때문에 eats는 더이상 존재하지 않습니다.

Morty Proxy This is a proxified and sanitized view of the page, visit original site.