this的指向

this 是很多人会混淆的概念,它是一个指针,执行时会确定指向谁。

我们先来看几个函数调用的场景

function foo() {
  console.log(this.a);
}
var a = 1;
foo();

var obj = {
  a: 2,
  foo: foo
}
obj.foo()

// 实例化对象 c
var c = new foo()

分析以上代码:

  • 对于直接调用 foo 来说,不管 foo 函数被放在了什么地方,this 一定指向 window

  • 对于 obj.foo() 来说,我们只需要记住,谁调用了函数,谁就是 this,所以在这个场景下 foo 函数中的 this 就是 obj 对象

  • 对于 new 的方式来说,this 被永远绑定在了 c 上面,不会被任何方式改变 this

总结:

  1. 函数直接调用时,this 永远指向 window。比如fun();相当于window.fun();

  2. 函数作为对象的方法被调用时,this指向调用方法的那个对象

  3. 以构造函数的形式调用时,this 指向 new 出来的那个对象

文档更新时间: 2023-01-05 17:29   作者:孙老师