当我只想调用一个函数时,eval() 的更安全替代方案是什么?

3

我知道PHP有call_user_func,但我想知道JavaScript是否有类似的东西,例如要调用的方法是:object.set$fieldID($fieldValue)

我不想只为了执行一行代码而去使用if/else/switch语句块。

如果有帮助的话,我在使用jQuery。

2个回答

9
object["set" + $fieldID]($fieldValue);

以上阅读材料: 成员运算符MDC 上。

一些高级方法包括 Function.prototype.callFunction.prototype.apply。前者在某种程度上相当于 PHP 的 call_user_func(),而后者在某种程度上相当于 PHP 的 call_user_func_array()

PHP 函数和 JavaScript 的区别在于,JavaScript 允许您在另一个对象的上下文中调用某个对象的方法。这是通过 call()apply() 的第一个参数来实现的。

使用 call()apply() 的相当于上面例子的代码如下:

object["set" + $fieldID].call(object, $fieldValue);
object["set" + $fieldID].apply(object, [$fieldValue]);

第一个参数必须是“object”,否则该方法将使用全局对象绑定“this”指针执行,在浏览器中为“window”。

您,先生,是一位非常出色的人。谢谢。 - Will Morgan

4

@lonut 是正确的。但更普遍的情况是,如果你想调用不属于显式对象(如全局)的函数,你可以在 window 对象上调用它们:

var foo = function() { alert(1); };
window['foo']();

由于所有对象都包含在window中,下面是另一个示例:

var object = function() { this.method = function() { alert(2); }; }
var instance = new object();
window['instance']['method']();

1
是的,使用 window 或类似于 this['foo']();(当全局对象不命名为 window 时)来调用全局函数是有用的。+1 - Ionuț G. Stan

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