call、apply、bind的区别 call和apply、bind都是可以修改this的指向,只是bind修改this的指向而并不会立即执行,call和apply都会立即执行并修改this指向,只是他们俩的唯一区别是传给函数的参数call是fn.call(ctx, arg1, arg2,……)的形式,apply是fn.apply(ctx, [arg1,arg2,……]) 下面有两种方法重写bind函数
Function.prototype.bind = function(ctx) {
var self = this, args = Array.prototype.slice.call(arguments);
return function() {
return self.apply(ctx, args.slice(1));
}
};
Function.prototype.myBind = function(ctx, ...args) {
var self = this
return function() {
return self.call(ctx, ...args)
}
}
function fn(...args){
console.log(this, args)
//{a: 1}, [1, 9]
}
fn.myBind({a: 1}, 1, 9)
fn.myBind({a: 1}, 1, 9)()
fn.bind({a: 1}, 1, 9)