1.new 綁定(優(yōu)先級(jí)最高)
javascript
new Foo()
2.顯式綁定
foo.call(obj)
foo.apply(obj)
foo.bind(obj)()
3.隱式綁定
obj.foo()
4.默認(rèn)綁定(優(yōu)先級(jí)最低)
foo()
綜合示例
function identify() {
return this.name.toUpperCase();
}
const me = { name: 'Kyle' };
const you = { name: 'Reader' };
// 隱式綁定
console.log(identify.call(me)); // KYLE
console.log(identify.call(you)); // READER
// new 綁定
function Person(name) {
this.name = name;
}
Person.prototype.identify = identify;
const kyle = new Person('Kyle');
console.log(kyle.identify()); // KYLE
// 顯式綁定 vs 隱式綁定
function foo() {
console.log(this.a);
}
const obj1 = { a: 2, foo };
const obj2 = { a: 3, foo };
obj1.foo(); // 2 (隱式)
obj2.foo(); // 3 (隱式)
obj1.foo.call(obj2); // 3 (顯式 > 隱式)
obj2.foo.call(obj1); // 2 (顯式 > 隱式)