のは、私はPlayerオブジェクトがあるとしましょう:それは素晴らしい作品JS Prototypal継承:子は同じ親プロパティを使用しますか?
var player = function(name) {
this.handlers = {};
}
player.prototype.on = function(event, callback) {
if (!this.handlers[event]) {
this.handlers[event] = [];
}
this.handlers[event].push(callback);
}
、私は選手を作成することができ、それぞれがハンドラの独自のセットを持っています。今、私はplayer
から継承する必要があるとします
var testPlayer = function(name) {
this.name = name;
};
testPlayer.prototype = new player();
私はtestPlayer
年代を作成するときに今、それらのそれぞれが同じhandlers
特性を共有:
var adam = new testPlayer('Adam');
adam.on('test', function(){});
var eve = new testPlayer('Eve');
// eve.handlers == {'test':<function>}
私はここで何をしないのですか?私はすべてtestPlayer
のプロトタイプが同じであると理解していますnew player
子クラスを記述するときに作成するオブジェクトです。しかし、すべてのtestPlayersが独自のハンドラセットを持つための方法はありますか?
1を、これは最も使用可能なように見えます。 –
私は同意する、それは完全に有効なプログラミングのパラダイムだ。厄介な部分は、 'ハンドラー 'を使うあらゆるメソッドにこのようなチェックを追加しなければならないということです。 – MaxArt
コンストラクタから1つの 'init'メソッドを呼び出し、そこから実行することができます。これは、プロトタイプ上のオブジェクト(または配列)のプロパティを変更する場合にのみ問題になることに注意してください。プロトタイプに存在するプロパティに割り当てると、ローカルシャドウイングプロパティが自動的に作成されます(インスタンスからプロトタイププロパティに割り当てることはできません)。 – bfavaretto