Reflect.apply()
中的
在ES5中,通常使用Function.prototype.apply()方法来 调用具有给定值的函数,并以 数组(或类似数组的对象)。
Function.prototype.apply.call(Math.floor, undefined, [1.75]);
有了
Reflect.apply
,它变得不再那么冗长,更易于理解。
我很困惑。在ES5中,我通常使用(保留上面的示例):
Math.floor.call(undefined, [1.75]);
为什么应该使用某人代替
Function.prototype.apply.call(Math.floor, undefined, [1.75]);
P.S .:我的问题不是关于Reflect.apply(myFunction, myObject, args);
答案 0 :(得分:4)
可以覆盖函数上的方法,使apply
进行其默认用途以外的其他操作:
function foo() {
console.log("This doesn't happen");
}
foo.apply = function() {
console.log("This happens instead.");
};
foo.apply({});
此外,在过去,主机提供的函数并不总是具有这些方法(但现在不再是这样)。
这类似于人们建议使用Object.prototype.hasOwnProperty.call(x, y)
而不是x.hasOwnProperty(y)
的原因。 (但是在这种情况下,它还可以防止x
不继承自Object.prototype
的可能性,现在这种情况是可能的。例如,如果x
是{{1 }}或从以此方式创建的任何对象继承。)