将函数数组传递给另一个函数
Passing array of functions to another function
我正在尝试将任意数量的参数传递给函数。参数应该是 json 类型 [function : arrayOfArgs]。键是函数,值是参数的数组,应该传递给这些函数。
起初,我只考虑了一些参数的函数
function _gl(f,args){ f.apply(null,args); }
function func(a,b){ alert(a+b); }
调用函数
<input type="button" value="test" onclick="_gl(func,['2','3']);"/>
而且效果很好.现在我正在尝试推广该方法
function _GL(){
var arguments = _GL.arguments;
var i=0;
for(i;i<arguments.length;i++)
{
var A=arguments[i];
for(j in A) j.apply(null,A[j]);
}
}
并调用它
<input type="button" value="TEST" onclick="_GL({func:['2','3']});"/>
但是我收到以下错误"未捕获的类型错误:对象func没有方法'应用'"。
您可以使用此代码 jsFiddle:
_GL = function() {
var arguments = _GL.arguments;
var i = 0;
for (i = 0; i < arguments.length; i++) {
var arg = arguments[i];
for (j in arg) {
var f = window[j];
f.apply(null, arg[j]);
}
}
};
如您所见,您必须首先从 window
元素的名称获取函数f
。然后,f
具有正确的类型,则可以应用args
。
{func:['2','3']}
您正在创建一个带有名为 "func"
的(字符串)键的对象,值为 ['2','3']
。 字符串不是函数,所以它没有.apply()
。
在对象中,您的键必须是字符串,不能使用其他类型的键。
要"概括"它,你应该给它传递一个函数数组及其参数。 像这样:
[[func, ['2','3']], [func2, ['abc']]
因此,如果您这样做:
onclick="_GL([[func, ['2','3']], [func2, ['abc']]);"
然后你可以循环并获取函数并调用它们。
function _GL(funcs){
for(var i=0, len=funcs.length; i < len; i++){
var func = funcs[i];
func[0].apply(null, func[1]);
}
}
一种可能的解决方案;
var _gl = function (callables) {
// Loop through each property in the passed in object
for (var fnName in callables) {
// Only apply for properties that is local to `callables`
if (callables.hasOwnProperty(fnName)) {
window[fnName].apply(callables[property]);
}
}
};
... onclick='_gl({"MyFunction": ["a", 1, []]});' ...
您可以(并且应该!)使用可调用函数设置对象,而不是使用全局命名空间。
相关文章:
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在另一个函数中使用变量this
- 在另一个函数成功结束后调用该函数
- 多次调用另一个javascript函数中的javascript函数
- 使用JS函数来使用另一个函数的语法?node.js
- 嵌套到另一个函数中的Fancybox函数;不起作用
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- javascript函数将数据添加到屏幕,但随后被另一个函数覆盖
- 另一个Ajax函数触发的Ajax函数不起作用
- 如何从另一个处理程序内部取消JavaScript事件处理程序函数的执行
- 如何在不预定义的情况下将javascript函数传递到另一个函数中
- 从另一个函数获得$this值
- 如何记录调用另一个函数的函数的返回值
- 它在另一个函数中嵌套后不会输出文本
- 如何将自动完成的值传递到另一个函数中
- 将一个函数作为参数传递给javascript中的另一个函数
- 同一事物的两个函数,一个崩溃,另一个不崩溃,为什么
- 从另一个函数延迟解析的返回
- 多次调用promise函数,直到另一个promise函数满足条件