Javascript 为什么我应该调用Function.prototype.apply.call(x,…)而不是x.apply(…)?
MDN web文档上的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
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-我的意思是,一旦您开始使用一些不是您自己的或不是标准库一部分的模块时。:-)