this 的建立#
- 一般函数在预编译过程中生成的 AO 上下文
- AO 中除了函数内的一些属性和函数参数外,还有
arguments
和this
(箭头函数没有)。 - 所以函数(除了箭头函数)预编译过程会生成
this
隐式对象,并 默认指向 window。
this 指向#
- 而在预编译过程中,
this
会默认指向window
。 - 而
new
操作时,会在函数内生成一个隐式this
对象,而同时改变 AO 中this
指向为本this
- 用
obj.func()
调用的时候,会将func()
内的this
指向改为obj
以上this
的修改是在func
有this
的情况下,箭头函数没有 this,直接沿着作用域链向上寻找 this
注意函数作用域链的数据是由函数参数、函数内声明组成,fun.prop 无法 增加或更改作用域
this 规则概括#
- 函数编译过程中 AO 上下文中
this
默认指向window
- 全局作用域里
this
指向window
call
/apply
可以利用参数改变this
的指向obj.fun()
调用时,fun()
AO 中this
指向 obj (new
生成对象时默认return this
,所以只有this.xxx
的属性才能被访问到)- html 元素脚本中,函数参数中的
this
指向元素本身