this指向问题,call和apply和bind的区别。
call和apply接受的参数不同,结果一样:
apply接受的是数组:apply(obj, [参数1, 参数2, 参数3])
call是以直接接受参数的形式:call(obj, 参数1, 参数2, 参数3)
bind和call写法一样,call是直接运行这个函数,bind是返回一个函数,要自己去调用。
let a = 5
let obj = {
a: 8,
getA: function () {
console.log(this.a)
}
}
let obj2 = {
a:100
}
// 谁调用这个函数,this指向谁
// obj调用getA()这个函数,this指向obj
obj.getA() // 8
// call直接运行函数
// 1、obj调用getA()这个函数,this指向obj
// 2、但是用了call()这个方法,this指向obj2
// → obj2继承obj的getA()方法,改变指向
obj.getA.call(obj2) // 100
// bind返回一个新的函数
let newGetA = obj.getA.bind(obj2)
newGetA() // 100
2018/05/07