1. 程式人生 > 其它 >JavaScript-this規則優先順序

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