想象一下这样的场景:
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'?
答案 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)
。