2
純粋なプロトタイプベースのJavaScriptを理解しようとしています。私が苦労しているのは、再利用(継承)です。Javascriptの再利用:このアプローチにはどんな副作用がありますか?
私のプロジェクトでは、この方法でオブジェクトを再利用できるようにしました。
// very generic prototype
var Apparatus = (function(){
var self = Object.create({});
self.state = false;
self.on = function() { this.state = true; };
return self;
})();
// more specific prototype
var Radio = (function(){
var self = Object.create(Apparatus);
self.frequency = 0;
self.setFrequency = function(f) { this.frequency = f; }
self.getFrequency = function() { return this.frequency; }
return self;
})();
私は、2つの異なる無線を作成し、ラジオのオブジェクトをコピー/「インスタンス化」します。
var kitchenRadio = Object.create(Radio);
kitchenRadio.state = false;
kitchenRadio.on();
var carRadio = Object.create(Radio);
carRadio.state = false;
console.log(kitchenRadio.state, carRadio.state);
// true false
これは動作しますが、それでも続きますか?誰もが望ましくない結果を予測することはできますか?
これが望ましくないかどうかわかりませんが、 'Radio.on()'は 'kitchenRadio.state'を' true'に設定します。 – pimvdb
したがって、私は特にそれを避けるために、kitchenRadioとcarRadioの両方で状態プロパティを作成する必要があります。アプローチを大幅に変更することなくこれを修正できますか? –
私は、関数は継承されるべきであるが、 'state'のようなプロパティは継承されるべきではないと考えます。すべてのラジオは一般的な方法でオンになっていますが、各ラジオは独自の状態を持っています。したがって、各最終インスタンスは独自のプロパティを持ち、関数は継承されます。 – pimvdb