如果您尝试运行此JS代码段,
module.exports = {
add: function(a, b) { return a + b; },
subtract: function(a, b) { return add(a, -b); }
}
你会收到一个错误,说add
未定义。这同样适用于此:
module.exports = {
add: function(a, b) { return a + b; },
sums: {
two_and_three: add(2,3);
}
}
以这种方式调用前面提到的函数的最佳方法是什么?
答案 0 :(得分:4)
您应该使用this
,如下所示:
module.exports = {
add: function(a, b) { return a + b; },
subtract: function(a, b) { return this.add(a, -b); }
}
对于您的第二个用例,您需要这样的内容:
module.exports = {
add: function(a, b) { return a + b; },
sums: {
two_and_three: function() { return module.exports.add(2,3); }
}
}
答案 1 :(得分:1)
了解各种JS function invocation patterns会有所帮助:
如何调用函数,决定函数的上下文,可以使用函数内的'this'
关键字访问该函数。
现在来看你的代码:
module.exports = {
add: function(a, b) { return a + b; },
subtract: function(a, b) { return add(a, -b); }
}
我们将通过以下方式调用subtract函数:
module.exports.subtract(1, 3);
此处使用方法调用模式。这意味着减法函数中的this
将引用减法的父对象(module.exports
),其中还包含add
函数。因此,可以使用减法函数中的add
来访问this.add
函数,如下所示:
module.exports = {
add: function(a, b) { return a + b; },
subtract: function(a, b) { return this.add(a, -b); }
}
对于第二种情况,您可以使用wdosanjos' answer,如果sums.two_and_three
作为一项功能适用于您,或者您需要总和作为结果,这可以做到:
module.exports = {
add: function(a, b) { return a + b; }
};
module.exports.sums = {
two_and_three: module.exports.add(2,3),
three_and_four: module.exports.add(3,4)
};
或者,还有其他一些建议here的方法,用于访问父对象的兄弟/属性。
希望这会有所帮助:)
答案 2 :(得分:-1)
module.exports = {
add: function(a, b) { return a + b; },
subtract: function(a, b) { return this.add(a, -b); }
}