출처: ckdev301509@gmail.com
자바스크립트는 객체지향 언어이다.
그리고 우리가 알고있는 많은 언어들은 객체지향에서 클래스라는 강력한 기능을 필두로
사용자들에게 큰 도움이 되고있다. 그렇다면 자바스크립트에도 클래스가 있겠지?
신기하게도 ES6가 되어서야 클래스가 처음으로 자바스크립트에서 구현이 되었다.
그렇다면 이때까지 자바스크립트는 어떠한 기능으로 객체지향을 사용하고 있었을까?
거기에 대한 해답이 오늘 공부하게 될 프로토타입이다.
정확히 자바스크립트는 [프로토타입기반 객체지향 언어]라고 불린다.
프로토타입은 객체 원형인 프로토타입을 이용하여 새로운 객체를 생성한다.
이렇게 생성된 객체는 다른 객체의 원형이 될수도있다.(상속) 프로토타입은 객체를 확장(상속)하고 객체 지향적인 프로그래밍을 할 수 있게 도와준다.
프로토타입은 크게 두 가지로 해석됩니다.
1. 프로토타입 객체를 참조하는 prototype Object,
2. 객체 멤버인 proto 속성이 참조하는 ProtoType Link가 있다.
이 둘의 차이점을 이해하기 위해서는 JavaScript 함수와 객체의 내부구조를 이해 해야한다.
자바스크립트에서는 ProtoType Object와 ProtoType Link가 존재하고,
이 둘을 묶어서 ProtoType이라고 정의한다.
자바스크립트에서 함수가 정의 될 때, 함수는 기본적으로 Constructor가 부여된다.
생성자가 부여된 함수는 new를 통해서 객체를 생성할 수 있게된다.
또한 Prototype Object가 생성되고 이 Object와 함수가 가지고 있는 prototype 속성과 연결이 된다.
모든 객체는 proto 속성을 가지고 있다.
proto 속성을 ProtoType link라고도 말한다.
proto 속성은 자신의 부모 역할을 하는 상위 프로토타입을 가리킨다.
특정 속성을 찾을때 상위 프로토타입을 타고 쭉 올라가 스캔 하는데,
이를 프로토타입 체이닝이라고 한다.
최상위 프로토타입은 Object의 Prototype Object 이다. 여기 까지 값을 스캔하고 없다면 undefind를 출력한다.