- 프로토타입
- 프로토타입 객체
- 프로토타입 객체란?
- 어떤 객체의 부모 객체 역할을 하는 객체이다.
- 자식 객체는 부모 객체의 프로퍼티를 사용할 수 있다.
- 모든 객체는 하나의 프로토타입을 갖는다.
- 프로토타입과 생성자 함수
모든 프로토타입은 생성자 함수와 연결되어 있다.
다시말해, 프로토타입과 생성자함수는 단독으로 존재할 수 없고 언제나 쌍으로 존재한다.
- “proto” 접근자 프로퍼티
모든 객체는 “proto” 접근자 프로퍼티를 통해 자신의 프토토타입, 즉 [[Prototype]] 내부 슬롯에 간접접근 할수 있다. (직접접근을 막는 이유는 상호참조에 의해 무한 루프를 도는 프로토타입 체인이 생성되는 것을 막기 위함이다.) “proto”접근자 프로퍼티는 객체가 직접 소유하는 프로퍼티가 아니라 Object.prototype의 프로퍼티이다.
- 함수객체만이 소유하는 prototype 프로퍼티
- prototype 프로퍼티는 생성자 함수가 생성할 객체(인스턴스)의 프로토타입을 가리킨다.
- 화살표 함수와 ES6 메소드 축약 표현으로 정의한 메소드는 prototype 프로퍼티가 없다.
- 프로토타입의 constructor 프로퍼티와 생성자 함수
모든 프로토타입은 constructor를 갖는다. 이 constructor 프로퍼티는 prototype 프로퍼티로 자신을 참조하고 있는 생성자 함수를 가리킨다. 이 연결은 생성자 함수가 생성될때, 즉 함수 객체가 생성될 때 이뤄진다.- 프로토타입 체인
상속을 구현하는 메커니즘이다.
자바스크립트는 해당 객체의 프로퍼티에 접근하려고 할때, 해당 객체에 접근하려는 프로퍼티가 없다면 [[Prototype]] 내부 슬롯의 참조를 따라 부모 프로토타입의 프로퍼티를 순차적으로 검색한다. 이를 프로토타입 체인이라 한다.
- 객체의 생성방식
- 객체 리터럴
- Object 생성자 함수
- 생성자 함수
- Object.create 메소드
- 클래스(ES6)