php call user,javascript相当于php call_user_func

本文讲述了作者在JavaScript中遇到的动态创建参数难题,尝试将数组转换为函数调用格式的过程,并介绍了JavaScript中函数调用的不同方法,如直接调用、call()和apply(),以及如何利用这些方法正确传递参数。
摘要由CSDN通过智能技术生成

但是,我遇到了多个参数的问题.我意识到我正在做的是将我的参数转换为字符串并将其视为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);

电话和申请是类似的.它们让您决定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()使您可以自由地动态选择函数参数.

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

请注意,这在PHP中不起作用.它将指向调用函数的对象,而不是函数“属于”的对象. (“属于”这个概念在JavaScript中并不存在.事物可以通过这种方式建模,但它只是一种约定.)

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

标签:javascript

来源: https://codeday.me/bug/20190714/1455755.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值