Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
相当于PHP的javascript';s call_user_func()_Php_Javascript_Jquery_Function - Fatal编程技术网

相当于PHP的javascript';s call_user_func()

相当于PHP的javascript';s call_user_func(),php,javascript,jquery,function,Php,Javascript,Jquery,Function,有人知道有没有 我想使用变量名调用函数 编辑: 我在这里贴了一张小提琴,上面写着我要做的事: ... js: (函数($){ $.fn.MyPlugin=函数(){ 返回此值。每个(函数(){ var somefunction=function(arg1,arg2){alert(arg1);}, someotherfunction=函数(arg1,arg2){alert(arg2);}, reallyimportantfunction=函数(arg1、arg2){ var foo=$(th

有人知道有没有

我想使用变量名调用函数


编辑:

我在这里贴了一张小提琴,上面写着我要做的事:


...
js:

(函数($){
$.fn.MyPlugin=函数(){
返回此值。每个(函数(){
var somefunction=function(arg1,arg2){alert(arg1);},
someotherfunction=函数(arg1,arg2){alert(arg2);},
reallyimportantfunction=函数(arg1、arg2){
var foo=$(this.attr('id')+'function';
//这里我想用foo值作为名称调用函数,并将其传递给arg1和arg2

$()[foo](arg1,arg2);//实现这一点的方法有很多。最快、最脏(也是最不安全的!)的方法是(以下示例中的PS:fnName是存储为字符串的函数名)

不过,你也可以这样做

            this[fnName]();//careful with "this" though. Try replacing with "window" if it doesnt work for you
或者通过传递参数来调用它

this[fnName].apply(contextObject,argumentArray) //contextObject will be objest which will be referenced by the keyword "this" within the function body (fnName's body), argumentArrayy is the array of arguments you want to pass to function.

如果函数是在全局级别定义的,那么它将自动成为
窗口
对象的子对象

因此,您可以随时调用
window.functionName();
任何通常只调用
functionName();
的地方

此外,由于Javascript对象的工作方式类似于关联数组,因此可以使用如下数组语法调用任何对象的任何子对象:
object['childName']
。这包括函数,因此可以对作为对象成员的任何函数执行
object['functionName']();

将这两点结合在一起,可以调用任何全局定义的函数,如下所示:

window['functionName']();
由于上面示例中的
functionName
是一个字符串,因此可以在这些括号中使用一个变量,这意味着您拥有与PHP的
call\u user\u func()
相同的功能

[编辑]

正如我所说,这适用于任何对象。OP的注释指出,他希望以这种方式使用的函数在JQuery插件中。因此,它们可能是JQuery对象的一部分,通常会这样调用:
JQuery().functionName();
(或者用
$
代替
JQuery

Javascript语法允许我们在任何可以使用
.functionName()
的地方使用
['functionName']()
,因此,以上面的JQuery示例为例,我们可以将其更改为如下所示:

JQuery()['functionName']();`

但是这种技术可以适用于任何Javascript对象。在任何使用
.functionName()
的地方,它都可以被
['functionName']()

替换。嗯,浏览器Javascript本质上是不安全的。客户端可以随意更改代码。我会更害怕使用php
eval()
。只需确保严格检查服务器端提交的任何数据。这是事实。然而,eval被误解得太多。大多数程序员立即大叫“邪恶!!!”一旦他们看到eval,而有真正的案例,eval是非常有用的,并且是推荐的!真正的案例是的,但它们很少。浏览器的用户不是敌人;试图伤害他们的恶意用户是敌人。我们可以通过逃逸用户提供的数据来防止XSS,但“eval”会使该数据再次有害!我们使用的越多“eval”越有可能让恶意用户找到方法将其数据传递给它,从而绕过我们的XSS预防。此外,“eval”可能会妨碍代码分析,例如要求IDE查找函数的所有用法。函数(实际上是一组函数)是jquery插件中的一个函数变量。我试图使用来自同一个插件的不同函数变量的参数调用此函数plugin@Alex:在这种情况下,您需要的函数是JQuery对象的子对象,因此根据我上面的回答,您应该能够执行
JQuery['functionName']()
@Alex:hmm.实际上,更可能是
JQuery()['functionName']()
。但是如果您正常调用函数,您通常会如何调用它呢?任何时候您可以使用
.functionName()
,您可以用
['functionName']替换它()
,那么看看您当前对函数的使用情况,并调整此技术以适应。如果我正常调用它,它将是
somefunction('bla','bla');
:)在这种情况下,原始的
窗口['functionName']()
示例应该可以工作,因此:
窗口['somefunction']('bla','bla');
this[fnName].apply(contextObject,argumentArray) //contextObject will be objest which will be referenced by the keyword "this" within the function body (fnName's body), argumentArrayy is the array of arguments you want to pass to function.
var a = function(foo) {console.log(foo);}

a.call(null, 'test');
a('test');
window['functionName']();
JQuery()['functionName']();`