javascript中的this
2016年2月17日
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的值。