我已经得到了我与工作正常,扮演的是一个工厂模式例子,给了我一种方式来创建一个通用接口的相关对象:避免在JavaScript中继承使用新
$(document).ready(function() {
function Car(options) {
this.color = options.color || 'unknown',
this.name = options.carName || 'unknown',
this.doors = options.doors || 4;
}
function Truck(options) {
this.color = options.color || 'unknown',
this.name = options.name || 'unknow',
this.doors = options.doors || 2;
}
function VehicleFactory() { };
VehicleFactory.prototype.createVehicle = function (options) {
if (options.vehicleType === 'car') {
return new Car(options);
}
else {
return new Truck(options);
}
}
var factory = new VehicleFactory();
var car = factory.createVehicle({
vehicleType: 'car',
name: 'bill',
doors: 2
});
console.log(car instanceof Car);//true
var truck = factory.createVehicle({
vehicleType: 'truck',
doors: 3
});
//checks to make sure that objects are of the right type
console.log('truck is an instance of Car: ' + (truck instanceof Car)); //false
console.log('truck is an instace of Truck: ' + (truck instanceof Truck)); //true
console.log(truck);
});
即将从C#开始,这看起来很熟悉,我很容易理解。不过,我也倾向于站在巨人的肩膀上,道格·克罗克福德对新人说不。
我该如何重构此代码才能使用Object.create
而不是新的。这对于普通人来说是否真的很重要,还是仅仅因为上层梯队说的那么重要?
也许链接到克罗克福德的评论将帮助我们在上下文中解释它们。 –
@MikeSamuel这是一个由三部分组成的系列,每部视频都有一个小时左右的时间,我会试着去看看我能否找到更加审慎的资源。 – wootscootinboogie
这不是完全避免使用新关键字。 'Object.create'允许在JS(ECMA 5)中继承。使用new创建一个父对象只允许在该类内引用该对象,它不会从它继承。 –