Table of Contents
According MDN all three methods are very similar, and at the end they produce very similar result.
- they all accept
thisobject as first parameter. - then apply accepts and array of arguments vs bind and call accept a sequence of arguments.
Function.prototype.apply()
The apply() method calls a function with a given this value, and arguments provided as an array
Function.prototype.bind()
The bind() method creates a new function that, when called, has its this keyword set to the provided value, with a given sequence of arguments preceding any provided when the new function is called
const module = {
getX: function(one, two) {
return `${this.x} ${one} ${two}`;
}
};
const obj = {x: '123'};
console.log( "call: ",module.getX.call(obj, 'ONE', 'TWO') );
console.log( "apply: ",module.getX.apply(obj, ['ONE', 'TWO']) );
var newFunc = module.getX.bind( obj, 'ONE', 'TWO');
console.log("bind: ", newFunc());
result should be the same.
call: 123 ONE TWO apply: 123 ONE TWO bind: 123 ONE TWO