상속은 객체지향 프로그래밍의 핵심 개념으로 어떤 객체의 프로퍼티나 메서드를 다른 객체가 상속받아 그대로 사용하는 것을 말한다.
자바스크립트는 프로토타입 기반의 상속으로 불필요한 중복을 제거한다.
최상위 객체인 Object.prototype
을 제외한 모든 객체는 자신의 프로토타입을 갖는다.
모든 객체는 Object.prototype
의 접근자 프로퍼티인 __proto__
프로퍼티를 이용해 내부슬롯[[prototype]]
의 값인 자신의 프로토타입에 접근할 수 있다.
Object.prototype
의 하위 객체가 아닌 경우 __proto__
프로퍼티를 사용할 수 없다.
__proto__
대신 Object.getPrototypeOf
와 Object.setPrototypeOf
를 사용해 자신의 프로토타입에 접근하거나 프로토타입을 변경할 수 있다.
모든 생성자 함수는 프로토타입 객체를 갖는다.
이 객체는 자신의 프로토타입이 아니다.
Foo
라는 생성자 함수가 존재할 경우 Foo
의 프로토타입은 Function.prototype
이며, Foo
의 프로토타입 객체인 Foo.prototype
이 존재한다.
모든 생성자 함수는 프로토타입 객체를 갖는다.
동시에 해당 프로토타입 객체는 생성자함수를 갖는다.
생성자 함수와 프로토타입 객체는 쌍으로 존재한다.
Object.prototype
객체는 Object
생성자 함수를 가지며,
Function.prototype
객체는 Function
생성자 함수를 갖는다.
생성자 함수와 new 연산자를 통해 새로운 객체를 생성하면
이 객체의 프로토타입은 생성자 함수의 프로토타입 객체가 된다.
new Foo
를 통해 foo
를 생성하면,
foo
의 프로토타입은 Foo.prototype
이 된다.