Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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
JavaScript-使用另一个原型对对象应用函数调用_Javascript_Node.js_Function_Prototype_Ecmascript 2016 - Fatal编程技术网

JavaScript-使用另一个原型对对象应用函数调用

JavaScript-使用另一个原型对对象应用函数调用,javascript,node.js,function,prototype,ecmascript-2016,Javascript,Node.js,Function,Prototype,Ecmascript 2016,实际上,我面临的问题如下。我有一个数组,我们称之为arr。数组的第一个元素是函数,其余的是参数。例如: arr = [(a, b) => a + b, 5, 7]; 所以,我需要用参数5和7调用函数a,b=>a+b。但是,我不想使用arr[0]…arr.slice1,而是想使用Function.prototype.apply和Function.prototype.call,如果需要,我还可以使用Function.prototype.bind。所以基本上,我只允许访问arr一次,不能使用其

实际上,我面临的问题如下。我有一个数组,我们称之为arr。数组的第一个元素是函数,其余的是参数。例如:

arr = [(a, b) => a + b, 5, 7];
所以,我需要用参数5和7调用函数a,b=>a+b。但是,我不想使用arr[0]…arr.slice1,而是想使用Function.prototype.apply和Function.prototype.call,如果需要,我还可以使用Function.prototype.bind。所以基本上,我只允许访问arr一次,不能使用其他变量。此外,我不允许修改arr或它的属性,或将任何其他数据存储在某个地方,例如作为某个全局对象的属性,等等。这是可能的吗

我的尝试 我试着想出来,但这就是我想出来的,它不起作用:

Function.prototype.apply.call(this, ...arr);
但是,它会抛出一个错误,即:

未捕获的TypeError:Function.prototype.apply在全局上被调用,全局是一个对象而不是函数

问题 正确的方法是什么

相反,我想使用Function.prototype.apply和Function.prototype.call来实现。这可能吗

当然可以,但我们必须重复arr:

实例:

常数arr=[a,b=>a+b,5,7];
console.logarr[0]。调用…arr 您可以使用解构来获取arr数组的元素作为变量,然后使用索引1-N中的元素调用索引0中的函数

设arr=[a,b=>a+b,5,7]; 设[fn,a,b]=arr;
console.logfna,b;你认为这在你的例子中指的是什么?下面的方法可以工作:Function.prototype.call…arr.@FelixKling。对不起,我无意中删除了这个问题。好吧,你的例子并没有像预期的那样返回12,而是返回未定义的。哦,对了,我很困惑。。。。我认为不以这种或那种方式对数组进行切片是不可能的。没有内置函数允许您传递func、arg1、arg2等。。。。作为参数,并让它调用func。最接近的是func、thisValue、arg1、arg2等,。。。。但数组中不包含此值的值。当然,您可以构建一个助手函数:函数callf,…args{return f…args;}。然后您可以调用…arr.@user\u guest\u 333。arr的长度是否始终相同?如果允许此参数为arr本身,该怎么办?那么,不需要切片就可以了吗?@user\u guest\u 333:Doh!当然,因为有了arrow函数,thisArg无论如何都不会被使用。但我们仍然需要重复arr.Fixed。本质上,OP的问题是如何使用function.prototype.apply和function.prototype.call进行函数代数,所以这可能会完成任务,但有点忽略了重点。@torazaburo:嗯,我不同意,特别是考虑到非常令人惊讶的被接受的答案。我知道解构,但这绝对是我现在要问的。但无论如何,正如其他用户所解释的,我开始相信没有内置的方法来做我想做的事情。@user\u guest\u 333你说的内置是什么意思?您想要实现什么?我只尝试访问标识符arr一次,并且不使用其他标识符变量。切片数组需要至少两次访问arr。@user_guest_333应答处的代码只访问arr一次。不使用其他标识符是否意味着不将变量标识符分配给arr的元素?你想做arr.shift.applynull,arr吗?在你完成了所有的解构和rest元素之后,为什么不做fn…rest呢?
arr[0].call(...arr)