什么是对的eval()时,我只是想调用一个函数更安全的替代方案?(What's a more

2019-09-21 07:16发布

我知道PHP有call_user_func ,我只是想知道如果JavaScript从一开始类似的东西,在这里我要调用该方法,例如: object.set$fieldID($fieldValue)

我宁愿不办理的if / else /开关块只是正确执行的一行代码。

如果有帮助,我使用jQuery。

Answer 1:

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中的浏览器的情况下。



Answer 2:

@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']();


文章来源: What's a more secure alternative for eval() when I just want to call a function?