Как вы должны наследовать от EventEmitter в узле?
Я перечитывалэта маленькая статья понять наследование отEventEmitter
, но я немного запутался.
Он делает это:
function Door() {
events.EventEmitter.call(this);
this.open = function() {
this.emit('open');
};
}
Door.prototype.__proto__ = events.EventEmitter.prototype;
https://gist.github.com/chevex/7646362
Почему он вручную вызывает конструктор EventEmitter со своим собственным конструкторомthis
? Кроме того, почему он установил прототип прототипа своего подрядчика на прототипEventEmitter
? Это очень запутанно для меня.
Тогда кто-то в комментариях предложил сделать это вместо этого, что казалось более элегантным:
function Door() {
events.EventEmitter.call(this);
this.open = function () {
this.emit('open');
}
}
util.inherits(Door, events.EventEmitter);
https://gist.github.com/chevex/7646447
Это кажется НАМНОГО чище, чем другой путь, хотя, вероятно, это только потому, что я не понимаю, что происходит в первую очередь. Я не удивлюсь, еслиutil.inherits
делает то же самое, что и в первом примере.
Второй, по крайней мере, имеет для меня немного смысла, но я до сих пор не понимаю, почему они просто не делают этого:
function Door() {
this.open = function () {
this.emit('open');
}
}
Door.prototype = new events.EventEmitter();
https://gist.github.com/chevex/7646524
Может кто-нибудь объяснить мне, в чем различия между всеми этими подходами и почему в первых двух они вызывают.call(this)
наEventEmitter
конструктор? Я пропустил эту строку, когда пробовал примеры, и они все еще работали.