1

通常,在“构造函数”中,您使用 lambda 函数订阅事件:

function Something(){
   this.on('message', function(){ ... });
}
util.inherits(Something, events.EventEmitter);

这很好用,但效果不好。方法更适合继承:

function Something(){
   this.on('message', this._onMessage);
}
util.inherits(Something, events.EventEmitter);

Something.prototype._onMessage = function(){ ... };

保留这些事件处理函数的最佳实践是什么?

4

1 回答 1

2

如果我正确理解了这个问题,那么我认为这取决于你愿意接受多少改变。

您的第二个示例打开了子类(或者实际上是任何类)的选项来覆盖处理程序的代码,这不一定是一件好事。

第一个示例防止覆盖,但代价是在构造函数中包含匿名函数(有时包含大量代码)。但是,此代码可以提取到另一个私有函数(不在原型上,只是模块文件中的常规函数​​)。

闭原则处理这类问题。

于 2013-06-10T22:17:30.690 回答