![](/img/trans.png)
[英]How to pass a reference to a JS function as an argument to an ExternalInterface call?
[英]How to store a JS function reference with an argument included
这篇Stack文章展示了如何将参数作为.on()
绑定过程的一部分传递给JavaScript函数引用。 我想将参数与数组内的引用存储在一个对象中。
我在文件顶部定义了一些函数:
function func1() {
$('.result p').text('func1 success');
}
function func2() {
$('.result p').text('func2 success');
}
function func3(someNum) {
$('.result p').text('func3 success, someNum is ' + someNum);
}
我后来在同一个文件中有一个对象:
objects[0] = {
name : "Object 1",
funcs : [
func1,
func2,
func3// This is where I want to pass an arg, someNum
]
};
当某个事件发生时,我动态创建3个按钮,每个按钮绑定到对象数组中的这3个函数之一:
// append a button for each func
funcs.forEach(function(thisFunc) {
$('.buttons').append('<button id="' +
thisFunc.name + '">Run ' +
thisFunc.name + '</button>');
// bind that button to that func
$('#' + thisFunc.name).click(thisFunc);
});
这一切都适用于func1
和func2
但我找不到任何关于如何将此场景中的参数传递给func3
类的函数的文档。 理想情况下,我想将它存储在数组中,如下所示:
funcs : [
func1,
func2,
func3(5)
]
但是这会调用函数(你可以将(5)
添加到下面粘贴的Fiddle中以查看其中的操作)。 我想绑定到func3
函数,传递参数someNum = 5
,但只调用函数onclick
。
演示:
这个小提琴是一个工作演示,没有将参数传递给func3
,这是我不知道该怎么做的部分。
另外,如果我的问题在于我的绑定方式,动态创建按钮或存储对函数的引用,请告诉我。 我没有和这个代码结构结合,这只是构建它的方式。
使用Function.prototype.bind
方法创建一个新函数:
funcs : [
func1,
func2,
func3.bind(null, 5)
]
bind
将使用将在其中传递的参数创建一个新函数。
另一种方法是创建一个匿名函数,检查John Bledsoe的答案。
这应该工作我相信:
objects[0] = {
name : "Object 1",
funcs : [
func1,
func2,
function() { return func3(5); }
]
};
绑定到按钮时,您也可以同时使用apply和call
func.call(null, 5); '5 is just an example, give whatever param you want
要么
func.apply(null, [5]);
通过'绑定',我的意思是onclick =“func [3] .call(...)”in html或$(someobject).click(function(){func [3] .call(...)})。
特别是对于我的好朋友Lye Fish http://jsfiddle.net/d96ev3c8/8/ ,这将是一个小提琴。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.