私のプロジェクトでは、JavaScriptプロトタイプを継承するために使用しています。私はスーパータイプ(車のような)と多くのサブタイプ(アウディ/メルセデス/ ...)を持っています。すべての車のブランドは、非常に巨大なタイプの「ホーン」を使用しており、複製する必要はありません。このタイプの1つの方法は、各自動車ブランドによって上書きされるべきであるが、特定のサブタイプの範囲内に留まるべきである。これは、すべての車のサブタイプのホーンのサブタイプを作成せずに可能ですか? ありがとうございました!JavaScriptでただ1つのインスタンスのオーバーライドメソッド
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!
はい、右thatsの。私の(本当の)ケースでは音だけではなく、それは違う完全な方法です。 – trek7
@ trek7: 'this.horn.theMethod'に新しい関数を割り当てることができます。私はその答えについてのメモを追加しました。 –
@ trek7:ライブサンプルも追加されました。 –