Я новичок в Nodejs, и у меня есть вопрос о методе EventEmitter
listenerCount()
, но также и способе вызова статических методов в целом. Это пример кода из Nodejs учебника TutorialsPoint на эмиттере события:«Статические методы» EventEmitter()
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
для каждого из этих вызовов и существует (или может быть) какая-либо разница в поведении способов вызовов были сделаны в исходном коде и мои изменения?