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 是否在某个上下文对象中调用 ?
否则是默认绑定

posted @ 2020-12-01 14:23  我听不见  阅读(55)  评论(0编辑  收藏  举报