我已经构建了一个GUI,它传入一个长JS对象作为动画插件的设置。其中一个设置允许用户在动画完成后调用函数。不幸的是,它必须作为字符串传递给JS对象。
... [ 'functioncall()' ] ......
在我的动画回调中,我正在检索此字符串并尝试将其作为函数运行。
首次尝试完美,但使用eval ...
eval( OS.path_jscall[index].path_jscall[0][i] )
我设置了一个更喜欢的方法:
var HookFunction=new Function( OS.path_jscall[index].path_jscall[0][i] );
HookFunction();
两个示例都完美地调用了functioncall()函数。我不知道怎么把(这)传递给functioncall()虽然......
functioncall(obj){ console.log(obj); };
一切都在关注窗口。有任何想法吗?谢谢!
答案 0 :(得分:3)
调用您的函数时使用.call
。 .call
将第一个参数分配给this
变量。
var myFunction = function(arg1, arg2) {
alert(this);
}
myFunction.call(this, "arg1", "arg2");
使用您的第二个示例,您可以这样做:
HookFunction.call(this);
答案 1 :(得分:3)
假设HookFunction
是名称,您可以call()
或apply()
HookFunction.call(this,arg1,arg2,...,argN);
//or
HookFunction.apply(this,[arg1,arg2,...,argN]);
2的基本区别在于call()
收到你的“this”和后面的枚举参数列表,而apply()
收到你的“this”和一组参数