在module.exports中的一个函数中调用另一个函数,该函数被称为“local”。
在module.exports中的一个函数中调用另一个函数,该函数被称为“local”。
如何在一个module.exports
声明中的另一个函数中调用一个函数?\napp.js\n
var bla = require('./bla.js'); console.log(bla.bar());
\nbla.js\n
module.exports = { foo: function (req, res, next) { return ('foo'); }, bar: function(req, res, next) { this.foo(); } }
\n我试图从函数bar
内部访问函数foo
,但是我得到了以下错误:\n
\nTypeError: Object # has no method \'foo\'\n
\n如果我将this.foo()
更改为foo()
,我得到的是:\n
\nReferenceError: foo is not defined\n
问题的原因是在module.exports中调用了一个本地函数,但在调用时出现了undefined的情况。解决方法是将本地函数导出为一个公共函数,然后在需要调用该函数的地方进行调用。
具体的解决方法是在module.exports中定义一个变量self,将module.exports赋值给self,并在self中定义需要导出的函数。然后在需要调用该函数的地方,使用self来调用。
下面是一个示例代码,展示了如何使用self来调用本地函数:
var self = module.exports = { foo: function (req, res, next) { return ('foo'); }, bar: function(req, res, next) { self.foo(); } }
这样,就可以在bar函数中通过self.foo()来调用foo函数。
需要注意的是,这种方法可能在不同的Node.js版本中有所差异,因此在使用时需要进行测试和确认。
问题的原因是在module.exports中的一个函数调用另一个函数时出现了TypeError。问题的解决方法是将函数声明移到module.exports之外,然后再将函数赋值给module.exports的属性。
以下是解决问题的代码示例:
var foo = function (req, res, next) { return ('foo'); } var bar = function (req, res, next) { return foo(); } module.exports = { foo: foo, bar: bar }
通过将函数声明移到module.exports之外,然后再将函数赋值给module.exports的属性,可以解决函数调用的问题。
另外,在使用ES6的情况下,可以更简洁地将函数赋值给module.exports的属性:
module.exports = { foo, bar }
这样做可以达到相同的效果。
了解更多不同的代码风格和写法的比较,请参考这篇文章:gist.github.com/kimmobrunfeldt/10848413。
问题的原因是在module.exports中的一个函数调用另一个函数时,使用了错误的语法。在JavaScript中,this关键字引用了当前对象,但在module.exports中,this关键字不起作用。
解决方法是将this.foo()改为module.exports.foo()。通过使用module.exports关键字,我们可以正确地调用module.exports中的另一个函数。这样做更加直观和易读。
以下是一些其他解决方法的评论:
- 使用exports.foo()调用函数似乎有点奇怪和难以阅读。
- 如果在exports范围之外定义函数,那么会增加额外的间接性。虽然有时候这样做是可取的,但它会使重构变得更加复杂,比如重命名函数或查找函数的用法等。
- 通过Node.js v5.8.0,exports.foo()不起作用,但module.exports.foo()起作用。
- 对我来说,这个方法起作用了,但是我不需要使用module.exports = {...},而是对每个导出的方法都使用exports.myFunction = function()。
- 如果只使用exports.foo,只能在exports变量引用module.exports对象的情况下工作。如果想要在module.exports对象内部的一个函数中引用foo,则使用module.exports.foo。
- 在module.exports中使用this关键字是行不通的。
可以从这些评论中看出,解决方法是使用module.exports关键字来调用模块中的另一个函数。这样做更加直观和易读,而且可以避免一些语法错误。