[[Prototype]]에 저장__proto__접근자 프로퍼티를 통해 자신의 프로토타입에 간접적으로 접근할 수 있음__proto__접근자 프로퍼티__proto__는 접근자 프로퍼티!!__proto__접근자 프로퍼티를 통해 자신의 프로토타입([[Prototype]] 내부 슬롯)에 간접적으로 접근할 수 있음Object.prototype의 접근자 프로퍼티인 __proto__는 getter/setter함수라고 부르는 접근자함수를 통해 프로토타입을 취득하거나 할당__proto__ 접근자 프로퍼티는 상속을 통해 사용됨__proto__ 접근자를 통해 간접적으로 접근하는 이유prototype 프로퍼티prototype 프로퍼티는 생성자 함수가 생성할 인스턴스의 프로토타입을 지칭prototype 프로퍼티를 소유하지 않음__proto__접근자 프로퍼티와 함수 객체만 가지고 있는 prototype프로퍼티는 동일한 프로퍼티를 가지지만, 사용하는 주체가 다름| 구분 | 소유 | 값 | 사용 주체 | 사용 목적 |
|---|---|---|---|---|
__proto__접근자 프로퍼티 | 모든 객체 | 프로토타입 참조 | 모든 객체 | 객체가 자신의 프로토타입에 접근, 교체 |
prototype프로퍼티 | constructor | 프로토타입 참조 | 생성자 함수 | 생성자 함수 자신이 생성할 객체의 프로토타입을 할당 |
리터럴 표기법(const obj = {})에 의해 생성된 객체도 가상적인 생성자 함수를 갖는다.
프로토타입과 생성자 함수는 단독으로 존재할 수 없고 언제나 쌍으로 존재!!
리터럴 표기법에 의해 생성된 객체의 생성자 함수와 프로토타입
| 리터럴 표기법 | 생성자 함수 | 프로토타입 |
|---|---|---|
| 객체 리터럴 | Object | Object.prototype |
| 함수 리터럴 | Function | Function.prototype |
| 배열 리터럴 | Array | Array.prototype |
| 정규 표현식 리터럴 | RegExp | RegExp.prototype |
constructor)는 함수 정의가 평가되어 함수 객체를 생성하는 시점에 프로토타입도 더불어 생성Object 생성자 함수Object.create 메서드OrdinaryObjectCreate에 의해 생성된다는 공통점이 있음Object.prototype을 프로토타입으로 갖게 되며, Object.prototype을 상속받음Object 생성자 함수에 의해 생성된 객체 프로토타입Object.prototype을 프로토타입으로 갖게 되며, Object.prototype을 상속받음Object 생성자 함수 방식은 일단 빈 객체를 생성한 이후 프로퍼티를 추가prototype 프로퍼티에 바인딩되어 있는 객체