this 绑定机制
4种绑定机制
默认
绑定到全局,(严格模式为 undefined)
var a = 1
function say() {
console.log(this.a)
}
隐式
对象调用的上一级作用域
function say() {
console.log(this.a)
}
var obj = {
a:1,
say: say
}
obj.say() // 1
显式
特别指出作用域,后期不可更改,通过使用 call/apply/bind 来进行操作
var obj = {a: 1}
function say() {
console.log(this.a)
}
say.call(obj) // 1
new 绑定
函数通过 new 操作符后,会创建一个新的对象实例,this 此时绑定到该实例
function People(a) {
this.a = a
}
var p = new People(1)
判断顺序
1 是否在 new ?
2 是否通过 call,apply 或者 硬绑定调用 ?
3 是否在某个上下文对象中调用 ?
否则是默认绑定