Javascript 如何在JS对象定义中调用先前定义的函数?

Javascript 如何在JS对象定义中调用先前定义的函数?,javascript,Javascript,如果您尝试运行此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)

如果您尝试运行此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);
  }
}

以这种方式调用前面提到的函数的最佳方式是什么?

您应该使用
,如下所示:

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); }
  }
}
module.exports = {
  add: function(a, b) { return a + b; },
  subtract: function(a, b) { return this.add(a, -b); }
}
了解各种情况将有助于:

函数的调用方式决定函数的上下文,可以使用函数内部的
'this'
关键字访问该上下文

现在来看看你的代码:

module.exports = {
  add: function(a, b) { return a + b; },
  subtract: function(a, b) { return add(a, -b); }
}
我们将按以下方式调用减法函数:

module.exports.subtract(1, 3);
这里使用方法调用模式。这意味着减法函数中的
将引用减法的父对象(
module.exports
),该对象还包含
add
函数。因此,可以使用
this访问
add
函数。在减法函数中添加
,如下所示:

module.exports = {
  add: function(a, b) { return a + b; },
  sums: {
    two_and_three: function() { return module.exports.add(2,3); }
  }
}
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; }
};

module.exports.sums = {
    two_and_three: module.exports.add(2,3),
    three_and_four: module.exports.add(3,4)
};
或者,建议使用其他一些方法来访问父对象的同级/属性


希望这有帮助:)

添加
未在该范围内定义。它被定义为对象中的键,但键不是变量定义。@4castle感谢您的澄清!