프로토타입을 사용한 상속 구현, 생성자 빌려 쓰기

Jiwontwopunch·2022년 6월 24일
0

독학

목록 보기
89/102
post-thumbnail

프로토타입을 사용한 상속 구현

function Vehicle(){
  console.log('initialize Vehicle');
}

Vehicle.prototype.run=function(){
  console.log('run!');
}

Vehicle.prototype.stop=function(){
  console.log('stop!');
}

function Car(type){
  this.type=type;
}

function inherit(parent,child){
  function F(){};
  F.prototype=parent.prototype;
  child.prototype= new F();
  child.prototype.constructor=child;
}

// inherit() 함수를 이용하여 Car 클래스가 Vehicle 클래스를 상속하도록 구현
inherit(Vehicle,Car);

console.log(new Car('SUV'));

F() 생성자 함수의 prototype 프로퍼티로 부모 생성자 함수 Vehicle()의 prototype 프로퍼티를 설정. 그리고 F() 생성자 함수를 사용하여 빈 객체를 만든 후 자식 생성자 함수 Car()의 prototype 프로퍼티로 설정. 이렇게 되면 Car() 생성자 함수를 통해 생성된 car 객체에서 프로토타입 체인을 통해 Vehicle.prototype에 접근할 수 있게 된다.

생성자 빌려 쓰기

위의 코드에서 문제점은 Car 클래스의 인스턴스를 생성할 때 부모 클래스인 Vehicle() 생성자 함수가 호출되지 않는 것이다. 이 문제는 Car() 생성자 함수에서 apply() 메서드를 사용하여 해결할 수 있다.

function Car(type){
  Vehicle.apply(this, arguments);
  this.type=type;
}

이러한 방식으로 자식 클래스의 인스턴스를 생성할 때 부모 클래스의 생성자를 호출하는 것을 생성자 빌려 쓰기라고 한다.

Object.create()나 Object.setPrototypeOf() 메서드를 사용하면 더 쉽게 객체의 프로토타입을 지정할 수 있다.

0개의 댓글