如何从模块中的另一个函数中调用一个函数。出口报关吗?
app.js
var bla = require('./bla.js');
console.log(bla.bar());
bla.js
module.exports = {
foo: function (req, res, next) {
return ('foo');
},
bar: function(req, res, next) {
this.foo();
}
}
我试图从函数栏中访问函数foo,我得到:
TypeError: Object #没有foo方法
如果我将this.foo()更改为foo(),我得到:
引用错误:foo没有定义
为了解决你的问题,我在bla.js中做了一些改变,它正在工作,
var foo= function (req, res, next) {
console.log('inside foo');
return ("foo");
}
var bar= function(req, res, next) {
this.foo();
}
module.exports = {bar,foo};
在app.js中没有任何修改
var bla = require('./bla.js');
console.log(bla.bar());
我所做的是创建一个独立的foo函数,并在两个地方引用它。
这样,无论使用箭头还是常规函数,都可以避免任何问题
function foo(req,res,next) {
return ('foo');
}
然后我可以在这两个地方引用foo
module.exports = {
foo, // ES6 for foo:foo
bar: function(req, res, next) {
foo();
}
}
如果您这样做,您将在调用函数中丢失this对象引用。
如:
module.exports.a = function () {
return true
}
module.exports.b = function() {
return this.a();
}
这里你会遇到问题,因为当你调用this.a()时,它引用的是b函数的this对象。
要解决这个问题,你必须把this对象引用存储在某个地方或者使用箭头函数,因为箭头函数没有这个对象所以它总是引用外部的this对象
为了解决这个问题,像这样修改函数
module.exports.a = function () {
return true
}
module.exports.b = () => {
return this.a();
}