2015-11-19 41 views
6

我在一个单独的文件中有一个类。我需要在另一个文件中创建它的一个实例。我试过这个:node.js - 直接从需求创建类的实例

var connection = new require('./connection.js')("ef66143e996d"); 

但是,这是不工作,因为我想。现在我正在使用这个作为临时解决方案:

var Connection = require('./connection.js'); 
connection = new Connection("ef66143e996d"); 

两个问题;

首先,为什么不工作。
其次,我怎样才能做到这一点与单线?

回答

8

new关键字适用于它遇到的第一个函数。在这种情况下,这恰好是require。将括号括在括号中将会暴露出正确的功能:

var connection = new (require('./connection.js'))("ef66143e996d"); 
+0

这可行,好的。但我用'(“ef66143e996d”)'调用了'require'。为什么'new'不适用于从'require('./connection.js')(“ef66143e996d”)返回的函数''。这必须是它遇到的第一个功能。 – MindlessRanger

+1

当运行'new require('connection')()'时,require是它遇到的第一个函数。它从左到右进行评估。将括号中的require('connection')包装起来,使得无论括号解析为什么'new'都被应用到。 – jperezov

+1

为了澄清,假设'require('./connection.js')暴露了函数'Connection',''Connection'函数将不会被暴露,直到'require'函数被调用。 'new'关键字会在'require'函数之前触发_unless_函数被包裹在圆括号中。这与“3 * 2 + 1 = 7”的原因相同,但是“3 *(2 + 1)= 9”。在这个例子中把'new'关键字看作乘法 - 它有更高的优先级。 – jperezov