javascript等价于php调用_user _func

javascript等价于php调用_user _func,javascript,Javascript,我发现了我已经实现的这个主题(请参见接受的答案): 但是,我有一个多参数的问题。我意识到我所做的是将参数转换为字符串,并将其视为1个参数,但我不知道如何修复此问题,因为我正在动态创建参数 也就是说,我在我的代码中定义了以下内容: var a = new Array(); a[0] = new Array(); a[0][0] = 'alert'; a[0][1] = '\'Hello World\''; a[1] = new Array(); a[1][0] = 'setTimeout'; a

我发现了我已经实现的这个主题(请参见接受的答案):

但是,我有一个多参数的问题。我意识到我所做的是将参数转换为字符串,并将其视为1个参数,但我不知道如何修复此问题,因为我正在动态创建参数

也就是说,我在我的代码中定义了以下内容:

var a = new Array();
a[0] = new Array();
a[0][0] = 'alert';
a[0][1] = '\'Hello World\'';
a[1] = new Array();
a[1][0] = 'setTimeout';
a[1][1] = 'alert("goodbye world")';
a[1][2] = '20';
后来,我这样称呼他们:

    var j = 0;
    var len = 0;
    var fx = '';
    var params = '';
    for( i in a ){
        params = '';
        len = a[i].length;
        fx = a[i][0]; // getting the function name
        a[i].splice( 0, 1 ); // removing it from array
        if( len > 1 ){
            params = a[i].join(", "); // trying to turn the parameters into the right format, but this is turning it into strings I think
            params = params.replace(/\\'/g,'\''); // bc i was adding slashes with PHP
        }
        window[fx](params);
    }
我不必使用数组来实现这一点。我不理解JS OOP(还没有尝试过),尽管我对PHP OOP很熟悉,所以我不知道是否有办法做到这一点

任何关于传递多个参数的帮助都将不胜感激


谢谢。

签出功能。应用:

function test(a, b) { console.log([a, b]) }

test.apply(null, [1, 2]); // => [ 1, 2 ]

首先要做的事情是:放弃你的全部代码,重新开始。你的方法不会把你带到任何你想去的地方。(不幸的是,我不能告诉你你想去哪里,因为我无法理解你的例子。)

在JavaScript中调用函数有三种方法

function foo() { console.log(arguments); }

// 1. directly
foo(1, 2, 3);

// 2. trough Function.call()
foo.call(this, 1, 2, 3);

// 3. trough Function.apply()
var args = [1, 2, 3];
foo.apply(this, args);
call
apply
类似。它们让你决定
这个
关键字将指向函数内部的哪个对象(这是很重要的一点!)

apply
接受参数数组,
call
接受单个参数

最接近
call()
的是PHP的
call\u user\u func()
。最接近
apply()
的是PHP的
call\u user\u func\u array()

JavaScript对象与PHP数组共享一些东西:它们是键/值对

// an anonymous function assigned to the key "foo"
var obj = {
  foo: function () { console.log(arguments); }
};
这意味着您可以使用点符号访问对象属性:

// direct function call
obj.foo(1, 2, 3);
或通过方括号表示法(请注意,对象键是字符串):

方括号表示法使您可以自由地动态选择对象特性。如果此属性恰好是一个函数,
apply()
允许您动态选择函数参数

每个未声明为某个对象属性的顶级函数都将成为全局对象的属性。在浏览器中,全局对象是
窗口
。(因此,我上面的第一个代码块中的
函数foo()
实际上是
window.foo

请注意,
与PHP中的工作方式不同。它将指向调用函数的对象,而不是函数“所属”的对象。(JavaScript中并不存在“属于”的概念。可以这样建模,但这只是一种约定。)


通过直接调用(
obj.foo(1,2,3)
),该
将指向
obj
。使用
调用
应用
将指向您想要的任何对象。这比一开始听起来要有用得多。大多数时候,当你想动态调用函数时,你会使用
apply

window[fx].apply(obj,params)
你在这里是自讨苦吃。首先,您不应该有一个包含字符串代码的数组,这是错误的。不要让我开始用正则表达式解释这些字符串。你想干什么?进一步:切勿将
用于。。在数组上的
循环中,您根本不应该使用
new array()
var funcName = "foo";
obj[funcName](1, 2, 3);
obj[funcName].call(obj, 1, 2, 3);
obj[funcName].apply(obj, [1, 2, 3]);