🌈 인프런의 코어 자바스크립트(정재남) 수강 후, 이해한 내용을 정리한 글입니다.

prototype과 [[Prototype]]은 다르다.

prototype은 아래 그림에서 파랑과 빨강이 만나는 prototype을 말한다. 즉, constructor의 프로퍼티 중 하나이다. 반면, [[Prototype]]은 instance의 프로퍼티이다.

[[Prototype]] 안에는 뭐가 있는데

prototype과 동일한 객체가 들어있다. 아래 경우를 가정하자.

콘솔로 [[Prototype]]과 prototype을 확인하면 동일하다는 것을 알 수 있다.

[1, 2, 3]의 [[Prototype]]Array.prototype

그러므로 이론상으로는 아래의 코드가 성립한다.

instance.[[Prototype]] === constructor.prototype

하지만 실제로는 이렇게 접근할 수 없다.

이렇게 접근하려고 하면 SyntaxError가 나온다.

그래서 __proto__, getPrototypeOf라는 것이 있다.

둘 중, getPrototypeOf이 권장된다.

// 방법1
[1, 2, 3].__proto__

// 방법2(권장)
Object.getPrototypeOf([1, 2, 3])
방법1방법2(권장)

3줄 요약

  • prototype은 constructor의 프로퍼티이다.
  • [[Prototype]]은 instance의 프로퍼티이다.
  • [[Prototype]]으로는 instance에서 prototype에 접근 불가능하므로 __proto__, getPrototypeOf를 이용하자.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN