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]()?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论