【发布时间】:2016-12-19 14:02:54
【问题描述】:
在我的项目中,我使用 JavaScript 原型来实现继承。我有一个超级类型(如汽车)和许多子类型(奥迪/梅赛德斯/...)。每个汽车品牌都在使用“喇叭”,这是一个相当大的类型,不应该被复制。这种类型的一种方法应该被每个汽车品牌覆盖,但应该只保留在特定子类型的范围内。如果不为每个汽车子类型创建喇叭子类型,这是否可能? 谢谢!
http://codepen.io/trek7/pen/QGYaBW
function Horn() {
this.level = '123dB';
}
Horn.prototype.doTutut = function() {
return "Düdelüüüü!";
};
/********************************************/
function Car() {
this.horn = new Horn();
}
Car.prototype.honk = function() {
return this.horn.doTutut();
};
/********************************************/
Mercedes.prototype = new Car();
function Mercedes() {
this.color = 'blue';
}
Mercedes.prototype.drive = function() {
return "...BrumBrum...";
};
/********************************************/
Audi.prototype = new Car();
function Audi() {
this.color = 'red';
/* BAD Overwrite, but how can I achieve this functionality
without creating another Horn subtype? */
Horn.prototype.doTutut = function() {
return "Tütütütütü!";
};
}
Audi.prototype.honk = function() {
return this.horn.doTutut();
};
/********************************************/
var car = new Car();
car.honk(); // Düdelüüüü! - Right!
var mercedes = new Mercedes();
mercedes.honk(); // Düdelüüüü! - Right!
var audi = new Audi();
audi.honk(); // Tütütütütü! - Right!
mercedes.honk(); // Tütütütütü! - Wrong!
【问题讨论】:
标签: javascript oop inheritance overriding prototype