四种情况:
- 默认绑定: 直接调用函数指向window
- 隐式绑定: 对象里调用,绑定调用的对象
- new绑定
- 显式绑定
call apply bind
var name = 'window'
var person1 = {
name: 'person1',
foo1: function() {
console.log(this.name);
},
foo2: () => console.log(this.name),
foo3: function() {
return function() {
console.log(this.name);
}
},
foo4: function() {
return () => {
console.log(this.name);
}
}
}
var person2 = {name: 'person2'}
person1.foo1() // person1 隐式绑定person1
person1.foo1.call(person2) // person2 显式绑定person2
person1.foo2() // window
person1.foo2.call(person2) // window
person1.foo3()() // window
person1.foo3.call(person2)() // window
person1.foo3().call(person2) // person2
person1.foo4()() // person1
person1.foo4.call(person2)() // person2
person1.foo4().call(person2) // person1