Ваш второй пример не вызывает EventEmitter
. emitter
заканчивается ссылкой на функцию, а не на объект, созданный при вызове.
Если вы имели в виду, чтобы ()
на что:
var events = require('events'),
emitter = new events.EventEmitter();
против
var emitter = require('events').EventEmitter();
// Note ------------------------------------^^
Тогда есть два отличия:
У вас есть events
объект со ссылкой на события модуль.
Вы не использовали new
при звонке EventEmitter
.
Если в результате emitter
идентична, то да, это означает, что EventEmitter
преднамеренно делает new
необязательным. I don't see that in the docs, поэтому я не знаю, что я бы положился на это.
... или EventEmitter
довольно снисходителен в использовании/не используется new
и ()
?
Последняя часть, которая предполагает, что Вы уже использовали третий вариант:
var emitter = new require('events').EventEmitter;
// `new` -----^ but no() --------------------^
()
Having необязательно есть не то, что делает EventEmitter
; это оператор JavaScript new
, который это делает: если у вас нет аргументов для перехода к функции конструктора, то ()
являются необязательными в выражении new
. new
всегда называет функцию, которую вы ей даете, есть ()
или нет.