二十四.this关键字

123 阅读2分钟

this意义

给对象添加成员或修改成员的值

this代表执行这个this的环境对象,是一个对象;只有在call、apply、bind少数情况下不是对象。

this代表的环境对象判断

1)this在全局函数中代表window全局对象,全局变量和全局函数是window的属性和方法;

image.png

image.png

image.png

image.png

匿名函数中this指向全局对象为window

image.png

image.png

2)this只需要看离它嵌套关系最近的function的调用者或方法的调用者,没有就是window。

image.png

image.png

离this最近的嵌套关系的function是变量obj引用的对象中的成员fn所引用的函数。而让这个函数运行的是obj.fn()这行代码,所以调用者是变量obj引用的对象,则this代表这个对象。

image.png

image.png

arr[1]中保存的值是变量obj引用的对象中的方法fn,则打印的是变量obj引用的对象中的fn这个方法中的函数体,因为此时这个函数并没有调用即函数没有被执行this不会指向使函数执行的对象。

数组取下标:arr[1]取值表示访问到一个函数,函数用()表示调用函数使函数执行则this指向使函数执行的对象即arr[1]使函数执行,变量arr引用的数组是调用者所以this指向这个数组

对象取成员:obj.fn对象取值表示访问到一个函数,函数用()表示调用函数使函数执行则this指向使函数执行的对象即obj.fn使函数执行,变量obj引用的对象是调用者所以this指向这个对象

obj.say.fn()是this嵌套关系最近的function的运行的代码则this的调用者是obj.say属性所引用的对象。

this所指向的对象总结

obj.x()==>this是obj

obj.x1.x2()==>this是obj.x1属性引用的对象

obj.x1[2] ()==>this是obj.x1属性引用的数组

obj.x1().x2()==>第一个调用this是obj,第二个调用内部的this是obj.x1()函数返回的对象

obj.fn(this)==>fn函数内部的this是obj,小括号中的this看这个单词所在的函数是谁调用的,特别注意它跟fn函数没关系

其他情况下,一般this都是代表window。比如:匿名函数自调用 (function(){this})()===>this代表window, 普通函数调用fn()==>fn内部的this代表window