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

发布于 2022-09-07 11:55:29 字数 1273 浏览 20 评论 0

在阅读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]()?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文