JavaScript-this规则优先级

规则优先级

默认绑定优先级最低

 

显示绑定优先级高于隐式绑定
var obj = {
    name:"obj",
    foo: function() {
        console.log(this)
    }
}
​
obj.foo() //obj
//call/apply优先级高于隐式绑定
obj.foo.call("abc") //abc
obj.foo.apply("abc") //abc
//bind优先级高于隐式绑定
var bar = obj.foo.bind("cba")
bar() //cba

//更明显的比较
 function() {
        console.log(this)
}
var obj = {
    name:"obj",
    foo:foo.bind("aaa")
}
obj.foo() //aaa

 

 

new高于隐式绑定
var obj = {
    name:"obj",
    foo:function() {
        console.log(this)
    }
}
​
var f = new obj.foo()
//foo{} 

new高于显示绑定

//new关键字不能和appply/call一起使用

function foo() {
    console.log(this)
}
var bar = foo.bind("aaa")
var obj = new bar()
//foo{}

bind高于call

 

忽略显示绑定

function foo() {
    console.log(this)
}
foo.apply("abc")//abc
foo.apply({})//{}

//apply/call/bind: 当传入null/undefined时,自动将this绑定为全局对象
foo.apply(undefined)//window
foo.apply(null)//window

 

this规则之外-间接函数引用
var obj = {
    name: "obj1",
    foo: function() {
        console.log(this)
    }
}

var obj2 = {
    name: "obj2"
}

//obj2.bar = obj1.foo
//obj2.bar() //obj2

//独立函数调用
(obj2.baz = obj1.foo)()//window

 

posted @ 2022-04-06 14:19  李白lib  阅读(35)  评论(0)    收藏  举报