JavaScript-this規則優先順序
阿新 • • 發佈:2022-04-06
規則優先順序
預設繫結優先順序最低
顯示繫結優先順序高於隱式繫結
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
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