js学习note4 call/apply/bind的区别*

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

你可能感兴趣的:(js学习note4 call/apply/bind的区别*)