gpt4 book ai didi

相当于 php call_user_func 的 javascript

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:55:26 24 4
gpt4 key购买 nike

我找到了我已经实现的这个主题(参见已接受的答案):
javascript equivalent of PHP's call_user_func()

但是,我在使用多个参数时遇到了问题。我意识到我正在做的是将我的参数转换为字符串并将其视为 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 很满意,所以我不知道那里是否有办法做到这一点。

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

谢谢。

最佳答案

要做的第一件事:废弃你的整个代码,重新开始。你的方法不会带你去任何你想去的地方。 (不幸的是,我不能告诉你你想去哪里,因为我无法理解你的例子。)

在 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);

callapply 类似。它们让您决定 this 关键字将指向函数内部的哪个对象(这很重要!)。

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

最接近call()的是PHP的call_user_func()。最接近 apply() 的是 PHP 的 call_user_func_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);

或者通过方括号表示法(注意对象键是字符串):

var funcName = "foo";
obj[funcName](1, 2, 3);
obj[funcName].call(obj, 1, 2, 3);
obj[funcName].apply(obj, [1, 2, 3]);

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

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

请注意,this 不像在 PHP 中那样工作。它将指向函数被调用 的对象,而不是函数“属于”的对象。 (“属于”这个概念在 JavaScript 中并不真正存在。事物可以那样建模,但这只是一种约定。)

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

关于相当于 php call_user_func 的 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10061389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com