this是什么?不是什么?

  • this是执行上下文(ExecutionContext)的一个重要属性,是一个与执行上下文相关的特殊对象。因此,它可以叫作上下文对象(也就是用来指明执行上下文是在哪个上下文中被触发的对象)。
  • this不是变量对象(Variable Object)的一个属性,所以跟变量不同,this从不会参与到标识符解析过程。也就是说,在代码中当访问this的时候,它的值是直接从执行上下文中获取的,并不需要任何作用域链查找。this的值只在进入上下文的时候进行一次确定。

Invoke function as Method

  • 当函数作为一个对象方法来执行的时候,this的值就是该方法所属的对象。
  • 方法中的this代表方法所属的对象。

Invoke function as Constructor

  • 在JavaScript中,函数可以作为构造器来直接创建对象,在这种情况下,this就代表了新建的对象。

Invoke context-less function

  • 对于有些没有上下文的函数,也就是说这些函数没有绑定到特定的对象上,那么这些上下文无关的函数将会被默认的绑定到global object上。
  • 函数f和匿名函数表达式在被调用的过程中并没有被关联到任何对象,所以他们的this都代表global object。

call/apply/bind改变this

  • this本身是不可变的,但是 JavaScript中提供了call/apply/bind三个函数来在函数调用时设置this的值。