JavaScript 中的 this 绑定规则,含综合实例

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 (显式 > 隐式)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容