gpt4 book ai didi

javascript - 在 ECMAScript 2015 中调用 Reflect.apply() 比调用 Function.prototype.apply() 有什么好处吗?

转载 作者:行者123 更新时间:2023-12-03 01:41:24 25 4
gpt4 key购买 nike

我只是想知道是否有任何充分的理由打电话:

Reflect.apply(myFunction, myObject, args);

而不是:

myFunction.apply(myObject, args);

最佳答案

您可以比较 Function.prototype.apply 的定义和 Reflect.apply在规范中。

基本上它们是等价的,但有一个区别:如果参数列表为 nullundefinedFunction.prototype.apply 将调用不带参数的函数,Reflect.apply 将抛出异常。

function func() {
return arguments.length;
}
func.apply(void 0, null); // 0
Reflect.apply(func, void 0, null); // TypeError: null is not a non-null object

另一个区别是,当您使用 func.apply 时,您假设

  • func 是一个 Function 实例,即它继承自 Function.prototype
  • func 没有 apply 自己的属性,该属性会影响 Function.prototype.apply

但是 Reflect.apply 不需要这样做。例如,

var obj = document.createElement('object');
typeof obj; // "function" -- can be called
obj.apply; // undefined -- does not inherit from Function.prototype
Reflect.apply(obj, thisArg, argList); // -- works properly
var func = a => a;
func.apply = a => 0;
func.apply(void 0, [123]); // 0 -- Function.prototype.apply is shadowed by an own property
Reflect.apply(func, void 0, [123]); // 123 -- works properly

关于javascript - 在 ECMAScript 2015 中调用 Reflect.apply() 比调用 Function.prototype.apply() 有什么好处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34707306/

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