// 定义构造函数
var BicycleShop = function(name) {
this.name = name;
this.method = function() {
return this.name;
}
};
BicycleShop.prototype = {
constructor: BicycleShop,
/* 执行方法, {model} 型号 */
sellBicycle: function(name) {
var bicycle = this.createBicycle(model);
// A 业务逻辑
bicycle.A();
// B 业务逻辑
bicycle.B();
return bicycle;
},
createBicycle: function(name) {
throw new Error("父类是抽象不能直接调用,需要子类重写该方法");
}
}
//原型继承
function extend(Sub, Sup) {
// Sub 子类,Sup 超类
var F = function() {};
// 设置空函数的原型为超类的原型
F.prototype = Sup.prototype;
// 实例化空函数,并吧超类原型引用传递给子类
Sub.prototype = new F();
// 重置子类原型的构造器为子类自身
Sub.prototype.constructor = Sub;
// 在子类中保存超类的原型,避免子类与超类耦合
Sub.sup = Sup.portotype;
if (Sup.prototype.constructor === Object.prototype.constructor) {
// 检测超类原型的构造器是否为原型自身
Sup.prototype.constructor = Sup;
}
}
var BicycleChild = function(name) {
this.name = name;
// 继承构造函数父类中的属性和方法
BicycleShop.call(this, name);
};
// 子类继承父类原型方法
extend(BicycleChild, BicycleShop);
// BicycleChild 子类重写父类的方法
BicycleChild.prototype.createBicycle = function() {
var A = function() {
console.log("A 业务逻辑")
};
var B = function() {
console.log("B 业务逻辑")
};
return {
A: A,
B: B
}
}
var childClass = new BicycleChild('long en');
console.log(childClass);