2016-06-22 6 views
1

私はイベントエミッタをインスタンス化していて、これらのラインの両方が正常に動作しているように見えます。nodejs events - EventEmitter - クラスインスタンスを理解する

EventEmitterクラスをインポートしてインスタンス化する2つの方法の間のトレードオフや相違点を明確にしてもらえますか?

1:var eventEmitter = new (require('events')).EventEmitter();

2:var eventEmitter = new (require('events').EventEmitter)();

私のテイク: 1では

(require('events'))eventsモジュールの輸出を返す必要があります。次に.EventEmitter()はそのクラスを参照し、newEventEmitterの新しいインスタンスを作成します。

In 2,(require('events').EventEmitter) should return the exported EventEmitter class. Then new ...()creates a new instance of EventEmitter`。

+0

あなたがノードの最新のLTSを使用していると仮定すると、0.12以降のバージョンでは、 '.EventEmitter'部分は非推奨になっています。 var evntEmitter = new(require( 'events'))();これは、 –

答えて

1

これは珍しいことではありません。関数の周りに好きなだけ多くのかっこを入れてから、その後に()を置くことができます。

それは...

(1 + 2) === 3; 
((1) + 2) === 3; 
((1 + (2))) === (3); 

などに似て同じオブジェクト/関数に適用されます。

class MyClass { /* ... */ } 

const object = { 
    c: MyClass, 
}; 
let a = new object.c(); 

console.log(a === new (object).c()); 
console.log(a === new ((object.c))()); 
console.log(a === new ((object).c)()); 

等...

それはあなたが例えばので、ドット.後Parentheseのを置くことができないものを注目に値するです:

let a = new object.(c)(); 

がエラーをスローします。

関連する問題