使用Javascript引用同一对象中的函数

时间:2013-10-31 07:42:46

标签: javascript object

我有一个看起来像这样的JS对象:

return {
  foo: function() {
    return this.bar();
  },

  bar: function() {
    return 1;
  }
}

为什么我一直登录TypeError: this.bar is not a function登录FireBug?在同一个对象中引用bar()方法的正确方法是什么?

更新

所以我发布了整个代码here的小提琴。返回调用实际上是RequireJS foo()的一部分。如果需要进一步澄清,请与我们联系。

1 个答案:

答案 0 :(得分:3)

这取决于它的调用方式;如果将theObject.foo作为回调传递给另一个函数(例如jQuery(x).on("click", theObject.foo)),则this上下文可能会丢失。

强制执行bar调用foo的方法是关闭。将返回对象的函数更改为:

function thatReturnsTheOject() {
    var ret = {
        foo: function() {
            return ret.bar(); // <---- Using `ret` not `this`
        },
        bar: function() {
            return 1;
        }
    };
    return ret;
}

另一种方式,更复杂但可能导致更熟悉的语言使用是这样的:

function thatReturnsTheOject() {
    var ret = {};

    ret.foo = (function() {
        return this.bar(); // <---- Using `this` again
    }).bind(ret);          // <---- but note the `bind()`

    ret.bar = function() {
        return 1;
    };

    return ret;
}