728x90
- 자바스크립트는 프로토타입을 기반으로 상속을 구현
- 상위 객체의 역할 --> 공유 프로퍼티 제공
- 객체 리터럴 객체의 프로토타입 -->
Object.prototype
- 생성자 함수에 의한 객체으 프로토타입 --> 생성자 함수의
prototype
에 바인딩된 객체 - 모든 객체는 하나의 프로토타입을 보유함
- 모든 객체는
__proto__
를 통해서 자신의[[prototype]]
(프로토타입)에 접근 - 객체의
__proto__
는Object.prototype.__proto__
임 - 함수 객체는 객체중 유일하게
prototype
프로퍼티를 가지고 있음 --> 생성자 함수가 생성할 인스턴스의 프로토타입 - 모든 객체의
__proto__
와 함수 객체의prototype
는 가리키는 대상이 같음. 사용 주체가 다를 뿐(전자는 객체 자신, 후자는 생성자 함수) - 모든 프로토타입은
constructor
프로퍼티를 보유함 - 프로토타입과 생성자 함수는 언제나 공존함 --> 단독으로 존재할 수 없음
- 따라서 Non-constructor는 프로토타입이 생성되지 않음
프로토타입 생성 시점
- 프로토타입은 생성자 함수가 생성되는 시점에 함께 생성됨
constructor
는 함수 객체를 생성하는 시점에 생성되는데, 프로토타입도 생성됨
객체 생성 방식, 프로토타입 결정
- 모든 객체는 자바스크립트 엔진의 추상 연산
OrdinaryObjectCreate
에 의해 생성됨 OrdinaryObjectCreate
는 생성할 객체의 프로토타입을 인수로 받음- 객체 리터럴, Object 생성자 함수의 객체 생성 -->
Object.prototype
- 생성자 함수의 객체 생성 --> 생성자 함수의
prototype
프로퍼티가 참조하고 있는 객체
- 객체 리터럴, Object 생성자 함수의 객체 생성 -->
프로토타입 체인
- 프로토타입의 프로토타입은 언제나
Object.prototype
-->프로토타입의 종점
- 자바스크립트는 객체의 프로퍼티를 참조할 때, 객체에 참조하려는 프로퍼티가 없으면
[[prototype]]
을 참조하여 프로토타입의 프로퍼티 탐색 반복 - 프로토타입 체인은 상속과 프로토타입 검색 메커니즘 <--> 스코프 체인은 식별자 검색 메커니즘
instanceof 연산자
- 좌변 객체가 우변 생성자 함수에 의해 생성된 인스턴스인지 판별
- 우변 생성자 함수의 prototype 프로퍼티가 좌변 객체의 프로토타입 체인에 존재하면 true
직접 상속
Object.create
메서드- 첫번째 매개변수 : 생성할 객체의 프로토타입 대상 객체
- new 연산자 없이 객체 생성
- 프로토타입 지정하면서 객체 생성
- 객체 리터럴 객체도 상속받을 수 있음
정적 프로퍼티
- 인스턴스를 생성하지 않아도 참조, 호출할 수 있는 프로퍼티
- 생성자 함수가 생성한 인스턴스로 참조할 수 없음
학습 도서
- '모던 자바스크립트 Deep Dive', 이웅모 저, 위키북스
'Language | Basic > JavaScript' 카테고리의 다른 글
[JavaScript 스터디] 빌트인 객체 (0) | 2021.01.31 |
---|---|
[JavaScript 스터디] strict mode (0) | 2021.01.30 |
[JavaScript 스터디] 함수 객체, 일급 객체 (0) | 2021.01.29 |
[JavaScript 스터디] 생성자 함수로 객체 생성 (0) | 2021.01.29 |
[JavaScript 스터디] Property Attribute (0) | 2021.01.29 |