3

次の違いは何ですか:

new require('events').EventEmitter();

var events = require('events');
new events.EventEmitter();

最初のものは機能していませんが、2番目のものは機能しています。

なんで?

4

1 に答える 1

3

これらの行の違いに注意してください。

new foo().bar()

... と ...

new foo.bar()

最初のケースでは、new演算子はfoo()関数の処理方法を変更します。コンストラクターとして使用されます(thisプロトタイプのコピーなどを指します)。

ただし、後者の場合、後者は呼び出されないnewため、演算子をに適用することはできません。代わりに呼び出されるのはそのプロパティです。当然、ここでは、代わりにコンストラクターとして使用されることを意味します。foobarnewfoo.bar

そして、それはまさにあなたの例で起こることです:最初のケースは、 1つではなく関数呼び出しに適用しよnewうとします。require%require_result%.EventEmitter

于 2013-03-25T12:32:37.333 に答える