2

我正在尝试使用多种方法创建一个对象,但我希望某些方法可以使用来自同一对象的其他方法。这是一个例子:

var myObj = {
    sum: function (a,b) {
        return a + b;
    },
    somethingThatUsesSum: function (a,b) {
        return this.sum(a,b) * 5;
    }
};

如果您按如下方式调用它,则此“有效”:

myObj.somethingThatUsesSum(1, 2);

因为this设置为myObj. this但是,如果您使用 apply ,除非您明确设置为 ,否则它不起作用myObj

我不喜欢使用thisin somethingThatUsesSum,但我想知道是否有更好的方法。

我知道我可以创建一个带有本地函数的闭包,该函数sum可以被 中的两个函数使用myObj,但我想知道是否有另一种更接近上述方法的方法。

4

1 回答 1

0

就像 Pointy 说的那样,这就是 Javascript 的工作方式,但在这种情况下,您可以这样做(经过测试):

var myObj = {
    sum: function (a,b) {
        return a + b;
    },
    somethingThatUsesSum: function (a,b) {
        return myObj.sum(a,b) * 5;
    }
};
myObj.somethingThatUsesSum.apply(0,[3,5])// Or ...UsesSum.call(0,3,5)
// => 40
//0 stands for "I don't care what this is invoked on"
于 2014-09-13T19:28:03.197 回答