1.new 绑定(优先级最高)
javascript
new Foo()
2.显式绑定
foo.call(obj)
foo.apply(obj)
foo.bind(obj)()
3.隐式绑定
obj.foo()
4.默认绑定(优先级最低)
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 (显式 > 隐式)