我正在学习在NodeJS中使用ECMAScript6 -styled类(7.7.3)。我使用过这种编程风格:
//app.js
var forecastHandler = require('./forecastHandler.js');
//forecastHandler.js
class ForecastHandler {
constructor() {}
}
module.exports = new ForecastHandler()
直到现在它一直运行良好,因为我必须将参数传递给模块。
//app.js
var forecastHandler = require('./forecastHandler.js')(3600);
//forecastHandler.js
class ForecastHandler {
constructor(cacheUpdateDelay) {}
}
module.exports = new ForecastHandler(cacheUpdateDelay)
我收到此错误:ReferenceError:未定义cacheUpdateDelay。 我可以使用ES6样式的类将参数传递给ForecastHandler-module并在module.exports创建一个对象吗?如果我只导出类并在app.js中创建对象,代码可以工作,但它的语法很难看。
//app.js
var forecastHandlerClass = require('./forecastHandler.js');
var forecastHandler = new forecastHandlerClass(3600);
//forecastHandler.js
module.exports = ForecastHandler
编辑:更好的例子
答案 0 :(得分:1)
module.exports = new ForecastHandler(cacheUpdateDelay)
此代码的问题在于它在首次运行代码时初始化对象。
require('./forecastHandler.js')
表示“执行forecastHandler.js
中的所有代码并给我exports
对象。这意味着当没有{时,JS引擎会尝试运行new ForecastHandler(cacheUpdateDelay)
{1}}已创建。
执行此操作的简单方法是您提供的方法。加载类,然后尝试创建它的新实例。如果确实想要单行,您可以在cacheUpdateDelay
中执行此操作:
app.js
还有其他各种方法可以做到这一点。最简单的方法是不导出类而是函数。
例如,您可以在模块文件中执行此操作:
var forecastHandler = new (require('./forecastHandler.js'))(3600);