자바스크립트 상속 5


4. 클래스 방식 상속(프로토타입 공유)


  1. var Inherit = (function(){
  2.    
  3.     function Parent(name){
  4.         this.name = name || [1];
  5.         return this;
  6.     }
  7.  
  8.     Parent.prototype.getName = function(){
  9.         return this.name;
  10.     };
  11.  
  12.     function Child(){
  13.     };
  14.    
  15.  
  16.     Child.prototype = Parent.prototype;
  17.     // Child.prototype 맴버에 추가된 Parent.prototype으로 인해 Parent 생성자 함수로 변경된 Child.prototype.constructor 를 재설정해준다.
  18.     // (보통 정보성으로만 사용되는 프로퍼티이기 때문에 기능에는 거의 영향을 미치지 않는다.)
  19.     Child.prototype.constructor = Child;
  20.  
  21.     return new Child();
  22.  
  23. })();
  24.  
  25. alert(Inherit.getName); // getName()
  26. alert(Inherit.getName()); // undefined
  27.  
  28. alert(Inherit.constructor); // Child



1. Parent 생성자 함수에 인스턴스 맴버 name 속성을 추가 합니다.
 
2. Parent 생성자 함수에 프로토타입 맴버 getName 메서드를 추가 합니다.
 
4. Child 생성자 함수의 프로토타입 맴버에 Parent 생성자 함수의 프로토타입 맴버를
추가 합니다.
 
5. new Child 객체를 반환 합니다.
 
6. 여기서 new Child 객체는 new Parent 객체의 맴버(프로토타입) 모두(getName())를
상속 받습니다.



이전 포스트의 클래스 방식 상속은 모두 부모 생성자를 호출한것과 달리 이번에 살펴볼 상속 패턴은 부모 생성자를 호출하지 않습니다.
 
원칙적으로 객체 멤버에서 재사용될 멤버는 인스턴스 맴버가 아닌 프로토타입 맴버에 추가되어야 하며, 즉 상속 되어야 하는 모든 멤버들은 프로토타입에 존재해야 한다는 것입니다.
 
하지만 이 방법은 이전과 달리 부모 생성자 함수를 한번도 호출하지 않으므로 인스턴스 맴버는 상속 받지 못한다는 단점을 가지고 있습니다.