apply,all,bind的区别
这三个都是用来改变this指向的
call() 和apply()的第一个参数相同,就是指定的对象。这个对象就是该函数的执行上下文。call()和apply()的区别就在于,两者接收的参数不一样。call的传参是这样的:
fun.call(a,'wang mu'),apply的传参是这样的fun.apply(a,['wangmou']),bind的传参:fun.bind(a)('wang mu'),bind返回的时候仍然是一个函数,我们在调用的时候进行传参。bind不能立即执行,apply,call可以立即执行
var a={ user:' wang mu', fn:function(){ console.log(this.user) } } var b = a.fn; b.call(a)
var a={ user:' wang mu', fn:function(){ console.log(this.user) } } var c= a.fn; c.apply(a)
var a={ user:' wang mu', fn:function(){ console.log(this.user) } } var d = a.fn; var e = d.bind(a) e() //当输入d的时候你可能想d.bind(a)就可以直接输出了,可是结果确没有,也说明bind确实是稍后执行,all,apply是立即执行
bind会创建一个新函数,称为绑定函数
bind() 方法和前两者不同在于: bind() 方法会返回执行上下文被改变的函数而不会立即执行,而前两者是直接执行该函数。他的参数和call()相同。他是直接改变这个函数的this
指向并且返回一个新的函数,之后再次调用这个函数的时候this
都是指向bind
绑定的第一个参数。bind
传餐方式跟call
方法一致。