在函数调用中传递附加参数
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)
.
想象这样一个场景:
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)
.