如何用一行代码通过require创建Node.js Widget实例?
一行代码实例化Node.js Widget的正确姿势
嘿,你的问题很常见——想把导入和实例化合并成一行,但写法上踩了个小坑。咱们一步步理清楚:
首先,你的Widget导出是module.exports = ourWidget;,这里的ourWidget应该是一个构造函数(毕竟你要用new来实例化它)。你尝试的var ow = new (require('./ourWidget')());问题出在:
require('./ourWidget')已经直接返回了构造函数ourWidget,你后面多了个(),相当于先调用了构造函数(而且没加new,这本身可能就会导致问题),然后再去new这个调用的返回值——这显然不是你想要的。
正确的一行写法有两种:
括号明确优先级:
var ow = new (require('./ourWidget'))();这里括号把
require('./ourWidget')包裹起来,先获取构造函数,再用new来实例化它,最后加()传递参数(如果你的构造函数不需要参数,()也可以省略)。利用运算符优先级简化:
结合new和require的运算符优先级,直接写也能正常工作:var ow = new require('./ourWidget');如果构造函数需要传参,就加上括号:
var ow = new require('./ourWidget')(param1, param2);
验证一下等价性
这一行写法完全等价于你原来的两步操作:
// 原来的正常写法 var OurWidget = require('./ourWidget'); var ow = new OurWidget(); // 一行等价写法 var ow = new require('./ourWidget')();
这样写就可以正常实例化你的Widget啦!
内容的提问来源于stack exchange,提问作者delliottg
相关产品推荐
相关产品推荐

