객체는 프로토타입이라는 객체에 대한 링크를 갖는다.
객체의 어떤 속성에 접근할 때 객체 자체 속성과 그 프로토타입, 없으면 그의 프로토타입, 또 없으면 그의 프로토타입을 계속 체이닝해서 탐색한다.
function Car(){
}
console.log(Car.prototype);
prototype 객체는 생성자, __proto__
를 갖고 이를 prototyle Link라고도 한다.
생성자를 통해 생성된 객체는 prototype을 갖지 않는다. 생성자를 갖고 있는 prototype 객체를 가리키는 링크인 __proto__
만을 가진다.
function Car(){} //prototype : {};
Car.prototype.name = "포르쉐";//Prototype{name:"포르쉐"}:
let audi = new Car();
audi.prototype; //undefined
Car.prototype; // {constructor, __proto__(상위 Object를 가리킴)}
audi.__proto__; // car.prototype을 가리킴
Q? audi.name을 찍으면 뭐가 나올까?
__proto__
가 가리키는 곳을 탐색한다. 없으면 계속해서 올라가는데 이를 프로토타입 체이닝이라고 함!