Я новичок в Nodejs, и у меня есть вопрос о методе EventEmitter
listenerCount()
, а также о способе вызова статических методов в целом. Это пример кода из учебника TutorialsPoint Nodejs по генератору событий:
var events = require('events');
var eventEmitter = new events.EventEmitter();
// listener #1
var listner1 = function listner1() {
console.log('listner1 executed.');
}
// listener #2
var listner2 = function listner2() {
console.log('listner2 executed.');
}
// Bind the connection event with the listner1 function
eventEmitter.addListener('connection', listner1);
// Bind the connection event with the listner2 function
eventEmitter.on('connection', listner2);
var eventListeners = require('events').EventEmitter.listenerCount
(eventEmitter,'connection');
console.log(eventListeners + " Listner(s) listening to connection event");
// Fire the connection event
eventEmitter.emit('connection');
// Remove the binding of listner1 function
eventEmitter.removeListener('connection', listner1);
console.log("Listner1 will not listen now.");
// Fire the connection event
eventEmitter.emit('connection');
eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection');
console.log(eventListeners + " Listner(s) listening to connection event");
console.log("Program Ended.");
Он вызывает метод listenerCount()
для "класса" events
(это класс?), снова запрашивая события. Я имею в виду ту часть, где говорится:
var eventListeners = require('events').EventEmitter.listenerCount
(eventEmitter,'connection')
Я полагаю, что listenerCount()
по сути является статическим методом, поскольку вы не можете напрямую вызвать его для объекта events
.
(я тоже не совсем понимаю, почему реализация такая, и почему бы ее не реализовать так, чтобы я мог вызывать ее на своем eventEmitter
объекте, например: eventEmitter.listenerCount('connection')
)
Но в любом случае, что я потом пробовал, так это вызвать этот статический метод для моего объекта events
без дополнительного вызова require
(для обоих экземпляров в этом коде), чтобы он выглядел так:
events.EventEmitter.listenerCount(eventEmitter, "connection");
И вывод программы был таким же.
Итак, мой вопрос по этому поводу заключается в том, есть ли реальная причина, по которой автор назвал это, сделав новый require
для каждого из этих вызовов, и есть ли (или может ли быть) какая-либо разница в поведении того, как вызовы были сделаны в исходный код и моя переделка?