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

时间:2017-01-03 18:49:42

标签: 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);
  }
}

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

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); }
 }