通常,在“构造函数”中,您使用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(){ ... };
保留这些事件处理函数的最佳做法是什么?
答案 0 :(得分:2)
如果我正确地理解了这个问题,那么我认为这取决于你愿意接受多少改变。
你的第二个例子打开子类(或实际上是任何类)的选项来覆盖处理程序的代码,这不一定是件好事。
第一个示例防止覆盖,但代价是在构造函数中包含匿名函数(有时包含大量代码)。但是,这段代码可以提取到另一个私有函数(不在原型上,只是模块文件中的常规函数)。
open-close principal处理此类问题。