JavaScript의 상속은 프로토타입 체인을 통해 이루어집니다. 각 개체 내부에는 프로토타입으로 또 다른 개체가 있고 개체는 이 프로토타입의 속성을 상속합니다. 각 객체에 대해 다음 세 가지 방법으로 해당 프로토타입 객체에 액세스할 수 있습니다.
1.__proto__. 객체의 프로토타입 객체는 __proto__ 속성을 통해 접근할 수 있습니다. 이 속성은 Firefox, Safari 및 Chrome에서만 지원되며 IE 및 Opera에서는 지원되지 않습니다.
2.Object.getPrototypeOf(). 객체를 Object.getPrototypeOf() 메소드에 매개변수로 전달할 수 있으며, 실행 후 객체의 프로토타입 객체가 반환됩니다. 이 방법은 ECMAScript 5 표준에서만 지원됩니다.
3.o.constructor.prototype. 먼저 객체의 생성자 함수를 얻은 다음 생성자 함수의 프로토타입 속성에 액세스하여 프로토타입 객체에 액세스합니다. 이 방법을 사용하기 위한 전제 조건은 객체의 생성자를 가리키는 생성자 속성이 있다는 것입니다.
두 객체 사이에 프로토타입 체인 관계가 있는지 확인하려면 isPrototype() 메서드를 사용할 수 있습니다.
리터럴로 생성된 모든 객체의 경우 프로토타입 객체는 Object.prototype입니다(특수 객체로서 Object.prototype에는 프로토타입 객체가 없습니다).
new 연산자로 생성된 모든 객체의 프로토타입 객체는 생성자 함수의 프로토타입 속성입니다.
JavaScript에서 new 연산자를 사용하여 객체를 생성하는 과정은 다음과 같습니다.
1. 새로운 빈 개체를 만듭니다.
2. 이 객체의 __proto__ 속성이 생성자 함수의 프로토타입 속성을 가리키도록 합니다.
3. 이 개체를 이 매개 변수로 사용하여 생성자 함수를 실행합니다.
위의 생성 과정에서 동일한 생성자 함수로 생성된 모든 객체는 __proto__ 속성(즉, 프로토타입 객체)이 동일하다는 결론을 내릴 수 있습니다. 즉, 프로토타입 객체는 단 하나뿐입니다.