자바스크립트의 모든 객체들은 부모 역할을 하는 객체와 연결이 되어 있다.
부모 역할을 하는 객체를 prototype
이라고 한다.
자바스크립트에서 객체를 생성하는 방법에는 객체 리터럴을 통해서나 생성자를 통해서 만들 수 있다.1
2
3
4
5
6
7function A() {}
let AObject = new A(); //함수로 객체 생성
let obj = {}; // 객체 리터럴로 생성
AObject.prototype
obj.prototype
위와 같이 객체를 생성하면 constructor
와 __proto__
를 가지고 있다.constructor
는 생성되었던 함수이며 함수는 object이기 때문에 object의 prototype또한 상속 받아 사용할 수 있다.
이러한 것을 프로토타입 체이닝
이라고 한다.__proto__
는 prototype Link이다.
이번에 people.prototype.gender 속성을 추가했다.
lee라는 객체에 gender가 없는데 female이라는 값이 찍히는 것을 볼 수 있다.
__proto__
을 타고 가보면 객체가 생성될 때 조상이었던 함수의 prototype object를 가리키고 있다.
즉, lee가 gender속성을 가지고 있지 않기 때문에 gender라는 속성을 찾을 때 까지 상위 프로토타입을 검색한다.
또한 최상위의 object의 prototype object에 도달함에도 찾지 못할때는 undefined를 리턴한다.
이렇게 상위 프로토타입과 연결되어 있는 형태를 프로토타입 체인
이라고 한다.
쉽게 그림으로 나타내면 이런식이 되는거다.