Pav*_*ský 13 require new-operator node.js
我们有一个带有以下代码的file.js:
module.exports.func = function(txt) {
this.a = 1;
this.b = 2;
console.log(txt, this);
return this;
}
Run Code Online (Sandbox Code Playgroud)
现在我们有另一个JS文件,我们做以下事情:
var r1 = new (require('./file')).func('r1');
var r2 = new require('./file').func('r2');
Run Code Online (Sandbox Code Playgroud)
在r1的情况下,它按预期工作 - r1包含对新创建的对象的引用.
在r2的情况下,它不起作用 - r2从file.js中获取对module.exports的引用.
目的是通过调用func()构造函数来创建一个新对象.当然,我也可以这样做,它等于r1:
var r3 = require('./file');
var r4 = new r3.func('r1');
Run Code Online (Sandbox Code Playgroud)
但是,我不明白为什么r2的行为与r1的行为不同.
周围的额外括号('./ file')如何产生影响?
Ben*_*aum 25
这两个版本根本不同.
这个:
new (require('./file')).func('r1');
Run Code Online (Sandbox Code Playgroud)
执行require,返回导出,./file
然后在结果上调用new运算符.
这个:
var r2 = new require('./file').func('r2');
Run Code Online (Sandbox Code Playgroud)
Invokes require作为构造函数.
让我们看一个更加孤立和简单的例子:
new Date() // creates a new date object
new (Date()) // throws a TypeError: string is not a function
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10253 次 |
最近记录: |