자바스크립트 prototype chain


1. 프로토타입이란?


자바스크립트에서 모든 객체는 prototype에 기반합니다.
 

프로토타입은 다른 객체의 기반이 되는 객체이고, 새 객체가 가져야 할 맴버를 정의하고
구현 합니다.


객체는 내부 속성을 통해 자신의 프로토타입에 묶입니다. IE를 제외한 표준 브라우져들에서는
__proto__라는 이름으로 노출하여, 개발자가 사용할 수 있지만, [[Scope]]속성과
마찬가지로 코드에서 접근할수 없습니다.




또한 객체의 맴버는 인스턴스 맴버와, 프로토타입 맴버 두가지입니다.

인스턴스 맴버객체 인스턴스 자체에 있고, 프로토타입 맴버는 객체의 프로토타입에
있습니다.


1. A 생성자 함수의 Prototype Chain 도식화 예제 입니다.




1. A 생성자 함수는 Function()입니다.


2. A 함수 객체의 Constructor는 Function() 이며, 즉 Function.prototype 맴버를 상속 받고 Function.prototype 객체 속성은 Object.prototype 맴버를 상속 받습니다. 

3. A
.prototype 객체 속성은 Object.prototype 맴버를 상속 받습니다.








2. new A 객체가 추가된 Prototype Chain 도식화 예제 입니다.




1. A 생성자 함수는 Function()입니다.

2. A 함수 객체의 Constructor는 Function() 이며, 즉 Function.prototype 맴버를 상속 받고 Function.prototype 객체 속성은 Object.prototype 맴버를 상속 받습니다. 

3. A
.prototype 객체 속성은 Object.prototype 맴버를 상속 받습니다.
 

4. New A객체의 __proto__ 속성은 A.prototype과 연결됩니다.



아래는 지금 까지의 설명에 대한 예제코드 입니다.


  1. function A(){
  2.     this.name = 'name';
  3. }
  4.      
  5.      
  6. A.prototype.getName = function(){
  7.     return this.name;
  8. }
  9.  
  10.  
  11. alert(A.constructor); // Function()
  12. alert(A.prototype.constructor); // A()
  13. alert(A.prototype.hasOwnProperty); // Object.hasOwnProperty()
  14. alert(Function.prototype.hasOwnProperty); // Object.hasOwnProperty()
  15.      
  16. alert(new A().name); // name
  17. alert(new A().getName()); // name