1、相同点:
都是为了改变函数的this指向问题
2、不同点:
call和apply返回的是一个处理的结果,它绑定后会立即执行。而bind返回的是一个函数,待这个引用被调用时才执行。
call和apply的区别:
主要是它们传递的参数不同。
call第一个参数是this指向的对象,后面是多个参数,用逗号分隔开。
apply第一个参数也是this指向的对象,后面的多个参数是存放到数组中,使用这个数组作为参数。
(如果它们的第一个参数为null时,默认指向的是window)
Call如何实现bind
Function.prototype.bind2=function(obj){
let self=this;
args=Array.prototype.slice.call(arguments,1)
return function(){
self.call(obj)
}
}
Function.prototype.newBind=function(obj){
var self=this;
args=Array.prototype.slice.call(arguments,1);//模拟bind传参
return function(){
var bindArgs=Array.prototype.slice(arguments);//模拟执行bind的返回函数时的传参
self.appky(obj,args.concat(bindArgs))
}
};