在函数调用中传递一个额外的参数

时间:2017-06-29 21:07:05

标签: javascript requirejs

想象一下这样的场景:

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 module:subGame.js

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

file / requirejs module:view.js

这是模块为视图返回的内容:

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是另一个返回方法对象的模块,其中一个是subGame)

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

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

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

或者,我怎样才能得到:

renderSubGame: renderComponent('subGame') 

包含

的参数
renderSubGame (this.subGameInfo)

除了'subGame'?

1 个答案:

答案 0 :(得分:1)

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

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

您正在执行的操作是将obj.renderSubGame设置为从调用renderComponent('subGame') 返回的值。稍后执行obj.renderSubGame()时,它不会再次调用renderComponent。它将调用obj初始化时调用的返回值。

您可以通过以下方式获得所需的效果:

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

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