[[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
프로퍼티에 바인딩되어 있는 객체