これは主観的なものです (意見に基づく) - ただし、ある程度のことですので、急いで投票を締め切らないでください。誰もが異なる意見を持っており、人々はそれを行うための単一の方法を強制しようとしているため、職場でいくつかの議論を引き起こします.
単純なコンテキスト: インスタンスへのクロージャーで参照を保存するオプションがある場合、または polyfilled を使用するオプションがある場合、Function.prototype.bind
どちらのアプローチにもどのような欠点があると思いますか?
考えられるユースケースを説明するために、いくつかのクラス メソッドを作成しました。
パターン 1、保存された参照:
obj.prototype.addEvents = function(){
var self = this;
// reference can be local also - for unbinding.
this.onElementClick = function(){
self.emit('clicked');
self.element.off('click', self.onElementClick);
};
this.element.on('click', this.onElementClick);
};
パターン 2、単純な fn.bind:
obj.prototype.addEvents = function(){
// saved reference needs to be bound to this to be unbound
// once again, this can be a local var also.
this.onElementClick = function(){
this.emit('clicked');
this.element.off('click', this.onElementClick);
}.bind(this);
this.element.on('click', this.onElementClick);
};
パターン 2.5、proto メソッドからイベントへ:
obj.prototype.addEvents = function(){
// delegate event to a class method elsewhere
this.element.on('click', this.onElementClick.bind(this));
};
obj.prototype.onElementClick = function(){
this.emit('clicked');
this.element.off('click', this.onElementClick); // not matching due to memoized bound
};
個人的には、これを行う正しい方法は 1 つではなく、ケースごとに判断する必要があるという意見です。可能な場合は、保存された参照パターンが非常に気に入っています。私は言われています。
質問の要約:
考慮/注意すべき GC の問題はありますか?
いずれかの方法で他に考えられる明らかな欠点や落とし穴はありますか?
ポリフィル パフォーマンスまたはイベント ネイティブ.bind
vs 保存された参照?