将参数添加到作为参数的函数

时间:2014-09-09 21:14:40

标签: javascript

不知道如何解释这个问题,但基本上我有:

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"这让我这样做。这有可能吗?没什么大不了的,但是会把事情搞清楚。

由于

2 个答案:

答案 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

您可以在此处详细了解bindhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind