为什么我必须先分配导出的构造函数,然后才能使用new
运算符来实例化对象类型?
例如(使用npm包rss):
const feed1 = new require('rss'); // => errors out: this is undefined in constructor
const rss = require('rss'),
feed2 = new rss; // => works fine
据我了解Node的模块系统,require('rss')
公开了构造函数。那么为什么我不能“直接”使用它呢?
答案 0 :(得分:0)
我认为这是因为你在构造函数之后省略了括号。内部发生的是节点认为在require()调用之后添加括号 - 至少这是它的样子:
const i = new require('rss') // results in an error
现在,让我们用括号写下来:
const i = new require('rss')()
这也不起作用,因为在这种情况下,节点首先尝试评估require('rss')()
,然后执行new
,因为所有内容都是从右到左进行评估。
让我们告诉node现在不执行rss导出,而是正确创建一个实例:
const i = new (require('rss'))()