I am just wondering if there is any good reason to call:
Reflect.apply(myFunction, myObject, args); instead of:
myFunction.apply(myObject, args);
The Difference Between call() and apply() The difference is: The call() method takes arguments separately. The apply() method takes arguments as an array. The apply() method is very handy if you want to use an array instead of an argument list.
Reflect is a built-in object that provides methods for JavaScript operations that are interceptable. It is not a function object and it does not have a construct internal method. This means that you cannot invoke Reflect objects as functions or even use them with the new operator.
The apply() method allows an object to borrow the method of another object without duplicating the code. The server object doesn't have the turnOn() and turnOff() methods. In this example, the server object borrows the turnOn() method of the computer object.
prototype. apply() The apply() method calls the specified function with a given this value, and arguments provided as an array (or an array-like object).
You can compare the definition of Function.prototype.apply and Reflect.apply in the spec.
Basically they are equivalent, but there is a difference: if the arguments list is null or undefined, Function.prototype.apply will call the function with no arguments, and Reflect.apply will throw.
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 Another difference is that, when you use func.apply, you assume
func is a Function instance, i.e. it inherits from Function.prototype func has no apply own property which would shadow Function.prototype.apply But Reflect.apply doesn't require that. For example,
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With