[Javascript] 프로토타입

Min Seong Kim·2022년 7월 24일
0

프로토타입

  • 어떤 객체의 상위 객체역할을 하는 객체
  • JS에서 상속을 구현하는 메커니즘

프로토타입 객체

  • 모든 객체는 [[Prototype]] 이라는 내부 슬롯을 가지며 이 내부 슬롯의 값은 프로토타입의 참조(null인 경우도 있다)이다.
  • 객체가 생성될 때 객체 생성 방식에 따라 프로토타입이 결정되고 [[Prototype]]에 저장된다.
  • 모든 객체는 하나의 프로토타입을 갖고 모든 프로토타입은 생성자 함수와 연결되어 있다.

[[Prototype]] 내부 슬롯에는 직접 접근할 수 없지만 위 그림처럼 __proto__ 접근자 프로퍼티를 통해 자신의 프로토타입, 즉 자신의 [[Prototype]] 내부 슬롯이 가리키는 프로토타입에 간접적으로 접근할 수 있다.

프로토타입은 자신의 constructor 프로퍼티를 통해 생성자 함수에 접근할 수 있고, 생성자 함수는 자신의 prototype을 통해 프로토타입에 접근할 수 있다.

__porto__접근자 프로퍼티

  • 접근자 프로퍼티는 자체적으로 값([[Value]] 프로퍼티 어트리뷰트)를 갖지 않고 다른 데이터 프로퍼티의 값을 읽거나 저장할 때 사용하는 접근자 함수(Accessor Function)

  • [[Get]], [[Set]] 프로퍼티 어트리뷰트로 구성된 프로퍼티이다.

  • __proto__ 접근자 프로퍼티를 통해 프로토타입에 접근하면 내부적으로 __proto__ 접근자 프로퍼티의 getter 함수인 [[Get]]이 호출된다.

  • __proto__ 접근자 프로퍼티를 통해 새로운 프로토타입을 할당하면 __proto__ 접근자 프로퍼티의 setter 함수인 [[Set]]이 호출된다.

클래스, 인스턴스, 프로토타입의 관계

프로토타입 체인

  • 자바스크립트 객체의 프로퍼티(메서드 포함)에 접근하려고 할 때 해당 객체에 접근하려는 프로퍼티가 없다면 [[Prototype]] 내부 슬록의 참조를 따라 자신의 부모 역할을 하는 프로토타입 프로퍼티를 순차적으로 검색한다. 이를 프로토타입 체인이라고 한다.
  • 모든 객체는 Object.prototype을 상속받는다. 따라서 Object.protoype을 프로토타입 체인의 종점이라 한다.
  • 객체에 프로퍼티가 없다면 프로토타입 체인을 따라, 다시 말해 [[Prototype]] 내부 슬롯에 바인딩되어 있는 프로토타입으로 이동하여 프로퍼티를 검색한다.
  • 부모 역할을 하는 프로토타입에도 프로퍼티가 없다면 프로토타입 체인을 따라, 다시 말해 [[Prototype]] 내부 슬롯에 바인딩되어 있는 프로토타입으로 이동하여 프로퍼티를 검색한다.
  • 프로토타입 체인의 최상위에 위치하는 객체는 언제나 Object.prototype이다.
  • Object.prototype의 프로토타입, 즉 [[Prototype]] 내부 슬롯의 값은 null입니다.
  • 프로토타입 체인의 종점에서도 프로퍼티를 검색할 수 없는 경우 undefined를 반환합니다.
profile
의미 있는 개발자

0개의 댓글