避免使用 EVAL 并将 THIS 传递到函数中?

3

我已经建立了一个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()函数。但是我不确定如何将(this)传递给functioncall()函数...

functioncall(obj){ console.log(obj); };

所有内容都在引用窗口,有什么想法吗?谢谢!


可能是重复的问题:Javascript:如何轻松设置“this”变量? - Kyle Trauberman
"必须将其作为字符串传递到JS对象中" 为什么? - outis
2个回答

3

在调用函数时,请使用.call.call 将第一个参数分配给this变量。

var myFunction = function(arg1, arg2) {
    alert(this);
}

myFunction.call(this, "arg1", "arg2");

使用您的第二个例子,您可以这样做:
HookFunction.call(this);

3
假设 HookFunction 是名称,您可以使用 call()apply()
HookFunction.call(this,arg1,arg2,...,argN);

//or

HookFunction.apply(this,[arg1,arg2,...,argN]);

这两者的基本区别在于,call()会接收你的"this"以及其后的一个枚举列表作为参数,而apply()则会接收你的"this"以及一个参数数组。


完美地工作了!非常感谢,它需要在字符串调用中添加“this”的额外步骤 :) 你太棒了! - Aaron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接