我正在测试这个框架并遇到了这些问题,我不知道为什么会发生这些问题,但在 Node.js 文档和全局搜索中都找不到答案。
init.js
const { f1, v1, v2, f2 } = require('./1.js')
f2()
1.js
module.exports = {
f1: function (v1) { f1(v1) },
v1: 1,
v2: this.v1 + 1,
f2: function () { f1(this.v2) },
// * error: outputs NaN .
// f2: function () { this.f1(this.v2) },
// * error: when called from importing script, crashes with `TypeError: this.f1 is not a function` .
//
// This function works if `<<name for Object>> = require('<<path>>')` syntax is used .
}
function f1 (v1) {
console.log(v1)
}
具体问题是:
如何在其他暴露函数中使用暴露函数和变量?
是否可以使用
module.exports = {
语法来实现?
如果您想保留定义
module.exports
对象内部所有内容的语法,您可以通过 this
或通过 module.exports
: 在其他函数体内引用它
module.exports = {
f1: function () {
// …
},
f2: function () {
this.f1()
},
f3: function () {
module.exports.f1()
},
}
对于变量(非函数属性),不能通过
module.exports
来引用对象。这是因为在计算属性值时,module.exports
还不存在。
你也不能用
this
来引用它,主要是出于同样的原因:this
指的是不同的事物,而不是对象。
如果您单独定义事物并导出它们,那么所有这些麻烦都可以轻松避免(还有额外的好处,例如使值只读、更细粒度的可见性控制等等):
const v1 = 1
let v2 = v1 + 1
function f1(arg) {
console.log(arg)
}
function f2() {
f1(v2)
}
module.exports = { v1, v2, f1, f2 }