this绑定优先级
显示绑定高于隐式绑定
var obj = {
name: "obj",
foo: function () {
console.log(this);
},
};
obj.foo(); //隐式绑定
obj.foo.call("abc"); //显示绑定
obj.foo.apply("abc");
bind绑定高于隐式绑定
var obj = {
name: "obj",
foo: foo.bind("aaa")
}
obj.foo()
注意:
var bar = obj.foo.bind("cba");
bar();//这边不能表示bind比隐式绑定优先级高
new绑定高于隐式绑定
var obj = {
name: "obj",
foo: function () {
console.log(this);
},
};
// new优先级高于隐式绑定
var f = new obj.foo();
new绑定高于隐式绑定
// 结论: new关键字不能和apply / call 一起使用
function foo(){
console.log(this);
}
var bar = foo.bind("aaa")
var obj = new bar()
结论
new绑定 > 显示绑定(apply/call/bind) > 隐式绑定(obj.foo() > 默认绑定(独立函数使用))