【问题标题】:Avoid EVAL and pass THIS to function?避免 EVAL 并将其传递给函数?
【发布时间】:2012-04-25 00:14:25
【问题描述】:

我已经构建了一个 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 jquery function call eval


【解决方案1】:

假设HookFunction 是名称,您可以使用call()apply()

HookFunction.call(this,arg1,arg2,...,argN);

//or

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

2 的基本区别在于call() 接收你的“this”和一个枚举的参数列表,而apply() 接收你的“this”和一个参数数组

【讨论】:

  • 完美运行!非常感谢,它需要一个额外的步骤来将“this”添加到字符串调用中:) 你太棒了!
【解决方案2】:

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

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

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

使用您的第二个示例,您可以这样做:

HookFunction.call(this);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多