在函数调用中传递附加参数

Passing an additional argument in call to a function

想象这样一个场景:

var obj = {
    renderSubGame: renderComponent
}

并使用参数 this.subGameInfo 调用 renderSubGame,如下所示:

renderSubGame(this.subGameInfo)

因此该参数将传递给 renderComponent(这本身确实是我想要的一件事)

但是 renderComponent 的参数 "component" 也需要一个参数,在本例中我希望它传递的参数是 "subGame":

var obj = {
    renderSubGame: renderComponent('subGame')
}

但是我丢失了传递给 renderSubGame 的参数。

那么我怎样才能同时获得 'subGame'(通过 obj)和 this.subGameInfo(通过函数调用)作为 renderComponent 的参数?


更具体地说,这是我的代码中的一般情况:

file/requirejs 模块:subGame.js

使用代码使得 subGame.render() 调用封闭函数 renderSubGame(),最终调用 view.renderSubGame(this.subGameInfo).

file/requirejs 模块:view.js

这是模块 returns 的视图:

return: {
    renderSubGame: renderComponent('subGame')
}

这就是我希望 renderComponent 大致为:

function renderComponent(component) {
    var renderMethods = _(render).getObjectMethodNames();                
        if (_(renderMethods).contains(component)) {
            render[component](*INITIAL_ARGS_FROM_SUBGAME.JS*);
    } else {
        throw 'Error: component method render.' + component + '() not 
        recognized as a method of render.';
    }
}

(render是另一个returns方法对象的模块,其中一个是subGame)


所以我的问题是参数 (this.subGameInfo) 没有到达 renderComponent。

我尝试过使用 .apply() 或 .call() 的解决方案,但它们似乎没有按照我想要的方式工作。

如果我要使用包含 renderSubGame 参数的 renderSubGame: renderComponent,那么如何将 'subGame' 添加到这些参数?

或者,我怎样才能得到:

renderSubGame: renderComponent('subGame') 

包括

的参数
renderSubGame (this.subGameInfo)

除了'subGame'?

首先,考虑您尝试的代码:

var obj = {
    renderSubGame: renderComponent('subGame')
}

您在那里所做的是将 obj.renderSubGame 设置为调用 renderComponent('subGame') 后的值 return。当您稍后执行 obj.renderSubGame() 时,它不会再次调用 renderComponent。它将调用初始化 obj 时进行的调用的 return 值。

您可以通过以下方式获得您想要的效果:

var obj = {
    renderSubGame: renderComponent.bind(undefined, 'subGame')
}

bind 创建一个新函数,其初始参数已绑定到某些值。 bind 的第一个参数在函数内部设置 this。我已将其设置为 undefined,因为您没有在 renderComponent 中使用 this。然后第二个参数使得当 obj.renderSubGame('foo', 1) 被调用时,它将等同于调用 renderComponent('subGame', 'foo', 1).