2017-12-05 12 views
0

なぜ次のコードでエラーが起こりますか?Node.jsのjavascriptクラスのインスタンス化

// In Foo.js 
class Foo { 
    constructor(a) { 
     this.a = a; 
    } 
} 

module.exports = Foo 

// In Index.js 
var foo = new require('path/Foo.js')('param'); 

これは私にはFooが「新しい」なしで起動することはできませんクラスのコンストラクタを提供します。

ありがとうございました。

+0

表示されているコードはinvokiですあなたのコンストラクタではなく 'new'で' require'関数を使っていますか? – nnnnnn

+0

@nnnnnn最後にmodule.exportsを実行するのを忘れていました。もし私がこれを行うなら、require( 'path/Foo.js)はFooクラスを返しますか? – eChung00

答えて

3

あなたのコードでnew演算子がrequire()関数に適用され、require()が返す関数には適用されません。

var foo = new require('path/Foo.js')('param'); 

...これを行うようなものです::

var foo = (new require('path/Foo.js'))('param'); 

...または:

var temp = new require('path/Foo.js'); 
var foo = temp('param'); 

newが適用されるように、代わりに次のことを試してみてくださいそれは、これですあなたのクラス:

var Foo = require('path/Foo.js'); 
var foo = new Foo('param'); 
+0

ありがとう!私は "require(" path/Foo.js ")は" Foo "と同じだと思った。 – eChung00

関連する問題