Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.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 为什么我应该调用Function.prototype.apply.call(x,…)而不是x.apply(…)?_Javascript_Apply - Fatal编程技术网

Javascript 为什么我应该调用Function.prototype.apply.call(x,…)而不是x.apply(…)?

Javascript 为什么我应该调用Function.prototype.apply.call(x,…)而不是x.apply(…)?,javascript,apply,Javascript,Apply,MDN web文档上的Reflect.apply()声明: 在ES5中,通常使用函数.prototype.apply()方法 使用给定的this值和作为 数组(或类似数组的对象)。 Function.prototype.apply.call(Math.floor,未定义,[1.75]) 使用Reflect.apply这会变得不那么冗长,更容易理解 我很困惑。在ES5中,我通常使用(保留上述示例): Math.floor.call(未定义,[1.75]) 为什么有人应该使用: Function.p

MDN web文档上的
Reflect.apply()
声明:

在ES5中,通常使用函数.prototype.apply()方法 使用给定的this值和作为 数组(或类似数组的对象)。
Function.prototype.apply.call(Math.floor,未定义,[1.75])

使用
Reflect.apply
这会变得不那么冗长,更容易理解

我很困惑。在ES5中,我通常使用(保留上述示例):

Math.floor.call(未定义,[1.75])

为什么有人应该使用:

Function.prototype.apply.call(Math.floor,未定义,[1.75])



附言:我的问题不是关于
Reflect.apply(myFunction,myObject,args)

可以覆盖函数上的方法,使
应用
执行其默认用途以外的操作:

函数foo(){
log(“这不会发生”);
}
foo.apply=函数(){
log(“这种情况会发生。”);
};

foo.apply({})可能重复的@LeroyStav-类似,但绝对不同,这是在比较
函数.prototype.appy
Reflect.apply
,上面询问的是
函数.prototype.apply
某个函数.apply
。(如果有直接的DupiTarget,我不会感到惊讶…@t.J.Crowder,但公认的答案确实涵盖了具体的子问题。当遇到这样的问题时,获取更多的背景信息总是很有价值的。因此,是的,你是完全正确的,因为这些问题并不完全相同,但在我看来,“可能重复”问题的公认答案似乎涵盖了所有基础,不是吗?@LeroyStav-如果是,它会,是的;所以不要求问题与另一个问题的答案完全相同。在我看来,没有一个答案能真正清楚地回答这个问题。Oriol在这里简单地提到了阴影属性,但仅此而已。不管怎么说,如果共识是相反的,我不会反对它。:-)@T.J.Crowder我接受任何修改删除:-)没错,但由于
apply
函数的一个可配置和可写属性。prototype
,也可以覆盖
函数。prototype.apply
使其执行默认用途以外的操作。(这同样适用于
Reflect.apply
)因此,关于这一点,没有真正的区别。@Min-soopipeets-有区别:使用
函数.prototype.apply会破坏很多东西。在特定函数上乱搞
apply
,只会破坏那些特定函数上的
apply
。(还有主机提供的功能,大部分是历史性的。)是的,没错。这似乎只是一个问题,在我的环境中,哪一种篡改更可能发生。但两者都是可能的。刚刚在node.js REPL中尝试了这两种方法,我的系统在这两种情况下都没有爆炸@Min SooPipefeet-我的意思是,一旦您开始使用一些不是您自己的或不是标准库一部分的模块时。:-)