gpt4 book ai didi

javascript - 在调用函数时传递附加参数

转载 作者:行者123 更新时间:2023-12-03 03:58:28 24 4
gpt4 key购买 nike

想象这样一个场景:

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 的参数?

<小时/>

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

文件/requirejs模块:subGame.js

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

文件/requirejs模块:view.js

这是模块返回的 View :

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 的参数的 renderSubGame: renderComponent,那么如何将“subGame”添加到这些参数中?

或者,我怎样才能得到:

renderSubGame: renderComponent('subGame') 

包含

的参数
renderSubGame (this.subGameInfo)

除了“子游戏”之外?

最佳答案

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

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

您正在做的就是设置 obj.renderSubGame为调用renderComponent('subGame')返回的值 。当你这样做时obj.renderSubGame()稍后就不会再调用 renderComponent再次。它将调用 obj 时进行的调用的返回值。已初始化。

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

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

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

关于javascript - 在调用函数时传递附加参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44835011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com