不知道如何解释这个问题,但基本上我有:
mg.postGiApi("Dashboard", "postChartOsTypeData", { groupIdList: that.idList }, function (data) {
that.tempName(data, "osType", cb);
});
我希望它看起来像:
mg.postGiApi("Dashboard", "postChartOsTypeData", { groupIdList: that.idList }, that.tempName.someExtendingFunction("osType", cb));
我在寻找" someExtendingFunction"这让我这样做。这有可能吗?没什么大不了的,但是会把事情搞清楚。
由于
答案 0 :(得分:1)
没有本地功能可以做到这一点,但你可以写一个类似的功能:
function someExtendingFunction(context, name, type, cb) {
return function(data) {
context[name].call(context, data, type, cb);
};
}
mg.postGiApi("Dashboard",
"postChartOsTypeData",
{ groupIdList: that.idList },
someExtendingFunction(that, "tempName", "osType", cb));
请注意that.tempName.someExtendingFunction(…)
永远不会有效,因为that
上下文会丢失。如果您在方法上调用someExtendingFunction
作为(Function.prototype
)方法,则需要明确提供上下文,例如bind
。
答案 1 :(得分:0)
为此,您可以bind
使用Function.prototype.bind
:
mg.postGiApi("Dashboard", "postChartOsTypeData", { groupIdList: that.idList }, that.tempName.someExtendingFunction.bind(null, "osType", cb));
这仅适用于与ECMAScript 5兼容的浏览器。如果您想要旧版浏览器支持的内容,可以使用underscore.js并使用其_.bind
函数。
mg.postGiApi("Dashboard", "postChartOsTypeData", { groupIdList: that.idList }, _.bind(that.tempName.someExtendingFunction, null, "osType", cb));
这将返回一个函数,该函数将使用您传递给它的参数进行调用。
null
指的是该变量的this
。
您可以在此处详细了解bind
:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind