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() 메서드를 사용하면 더 쉽게 객체의 프로토타입을 지정할 수 있다.