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
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