Javascript 使用同一对象中其他函数的对象函数
我试图用多个方法创建一个对象,但我希望一些方法使用来自同一对象的其他方法。以下是一个例子:Javascript 使用同一对象中其他函数的对象函数,javascript,Javascript,我试图用多个方法创建一个对象,但我希望一些方法使用来自同一对象的其他方法。以下是一个例子: var myObj = { sum: function (a,b) { return a + b; }, somethingThatUsesSum: function (a,b) { return this.sum(a,b) * 5; } }; 如果您将其称为以下内容,则此“有效”: myObj.somethingThatUsesSum(1
var myObj = {
sum: function (a,b) {
return a + b;
},
somethingThatUsesSum: function (a,b) {
return this.sum(a,b) * 5;
}
};
如果您将其称为以下内容,则此“有效”:
myObj.somethingThatUsesSum(1, 2);
因为此
设置为myObj
。但是,如果使用apply,除非将this
显式设置为myObj
,否则它不起作用
我不喜欢在状态中使用这个,但我想知道是否有更好的方法
我知道我可以用一个本地函数sum
创建一个闭包,该闭包可以被myObj
中的两个函数使用,但我想知道是否还有其他方法更接近上面提出的方法。如Pointy所说,这就是Javascript的工作方式,但在这种情况下,您可以这样做(经过测试):
这就是JavaScript的工作方式。极不推荐的with
语句提供了一种避免显式引用this
的方法,但它还有其他问题。谢谢。我原以为是这样的,但我想知道我是否遗漏了一些可以导致简化解决方案的内容。您使用apply的场景是什么?其他代码可以使用apply调用此函数,然后除非它们将myObj作为第一个参数传递给apply,否则它将无法工作。对我来说,这似乎是一种代码味道。请将这
视为“当前对象”。您可以将函数应用于另一个对象,只要它还有一个sum
方法。
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"