프로토타입이란?

2019-03-27

자바스크립트의 모든 객체들은 부모 역할을 하는 객체와 연결이 되어 있다.
부모 역할을 하는 객체를 prototype이라고 한다.

자바스크립트에서 객체를 생성하는 방법에는 객체 리터럴을 통해서나 생성자를 통해서 만들 수 있다.

1
2
3
4
5
6
7
function 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를 리턴한다.
이렇게 상위 프로토타입과 연결되어 있는 형태를 프로토타입 체인이라고 한다.

쉽게 그림으로 나타내면 이런식이 되는거다.