好的,这有点难以解释,但我have created a fiddle在这里展示我想要完成的事情。
我认为这与How can I pre-set arguments in JavaScript function call? (Partial Function Application)有关,但我没有弄清楚如何将此帖中提到的方法应用到我的方案中。
我有三个功能。
我想将一个参数传递给func3,它将传递给func2中的func1。
例如:
<input type='button' id='testButton' onclick='func3()' value='Click Me' />
<input type='button' id='testButton2' onclick='func3a(true)' value='Click Me Also' />
func3 = function (aBool) {
func2(func1);
}
// I want to be able to pass a parameter to the function
// that gets called in func2
func3a = function (aBool) {
func2(func1(aBool));
}
func1 = function (data, myBool) {
alert(data[0] + ' ' + myBool);
}
// Cannot Change this function
func2 = function (func) {
var data = [];
data[0] = "Hello World"
func(data);
}
答案 0 :(得分:2)
您可以使用内联函数将传递给func2
的函数包装起来。然后,它将调用委托给func1
传递附加参数。
E.g:
function func3a(aBool) {
func2(function(data) {
func1(data, aBool);
});
}
答案 1 :(得分:2)
您可以使用Function.prototype.bind
不仅绑定函数在(this
)中执行的上下文,还可以绑定函数调用的第一个参数。
func3 = function (aBool) {
func2(func1.bind(null,aBool));
}
func1 = function(myBool, data) {
alert(data[0] + ' ' + myBool);
}
请注意,我必须更改func1的签名以获取布尔值作为第一个参数,因此func2可以在调用它时设置第二个参数。
bind
的实施类似于Yoshi在实践中的答案。请注意,他的回答并未对参数的顺序施加任何限制。