这是主观的(基于意见) - 但只是在一定程度上,不要急于投票结束。在工作中引起一些争论,因为每个人都有不同的意见,并且人们正试图强制执行一种单一的方式。
简单的上下文:当您可以选择在您的闭包中保存对实例的引用或使用 polyfillFunction.prototype.bind
时,您认为这两种方法可能存在哪些缺点?
为了说明可能的用例,我只是编造了一些类方法。
模式一,保存参考:
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);
};
模式二,一个简单的 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);
};
模式二半,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
};
就个人而言,我认为没有一种正确的方法可以做到这一点,应该根据具体情况进行判断。我非常喜欢尽可能保存的参考模式。我被告知了。
问题回顾:
是否有任何 GC 问题需要考虑/注意?
对于这两种方法,您是否还有其他明显的缺点或陷阱?
Polyfill 性能或事件原生.bind
与保存的参考?