JavaScript 设计模式—— 抽象工厂部分代码疑问

在阅读JavaScript设计模式一书中,抽象工厂模式时的一段代码:

var VehicleFactory = function(subType, superType){
    if(typeof VehicleFactory[superType] === 'function'){
        function F(){}; 
        F.prototype = new VehicleFactory[superType]();
        subType.constructor = subType; //疑问一
        subType.prototype = new F();//疑问二
    }else{
        throw new Error('未创建该抽象类');
    }
}

//小汽车抽象类
VehicleFactory.car = function{
    this.type = 'car'
}
VehicleFactory.car.prototype = {
    getPrice:function(){
        return new Error('抽象方法不能调用')
    }
}
//公交车抽象类
VehicleFactory.Bus = function(){
     this.type='Bus';
}
VehicleFactory.Bus.prototype = {
    getPrice:function(){
        return new Error('抽象方法不能调用')
    }, 
    getPassengerNum:function(){
         return new Error('抽象方法不能调用');
     }
}
//使用时这样做:
var BMW = function(price){
    this.price = price
}
VehicleFactory(BMW, 'car');

//重写继承抽象类中的方法
BMW.prototype.getPrice = function(){
    return this.price 
}
var bmw1 = new BMW(100000);
cosole.log(bwm1.getPrice());

疑问一:这里是什么意思呢?应该只有原型上才会设置constructor属性吧,而subType是一个类的构造函数。不应该是subType.prototype.constructor = subType吗?并且这句应该放在subType.property = new F() 的后面?

疑问二:为什么此处要用F来过渡 ,为什么不能直接让subType.prototype = new VehicleFactory[superType]()?

阅读 1.5k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题