1.预编译过程,this指向window
2.全局作用域中,this指向window
3.call()、apply(),改变this指向
4.obj.fun(),fun()里的this指向obj
1.预编译过程中,其实就是函数执行的时候,函数中的this指向window
举例:
image.png
image.png
再举例:
函数执行时,函数中的this指向window,所以this.name获取的是window上的name,而不是函数中name
image.png
image.png
2.全局作用域中,this指向window
举例:
再举例:
在控制台输出this
image.png
3.call和apply能改变this指向,但是用法不同
举例:
当Car()中的方法完全包含了Model()的方法时,就可以利用call()方法,借用Model()中的方法实现自身功能。
也就是当你用Model调用call()方法时,并在第一个参数传入this要指向的对象时,从第二个参数开始传入Model()的参数,那么Model中用this创建的方法或属性就会传到Car()中,因为这时Model()中this变成了Car()的this。
所以Car()就利用call()的功能,通过Model()中的方法,实现了自己的功能。
image.png image.png
apply()的功能和call()相同,但是用法不同,
call()的第一位参数是this需要指向的对象,第二位参数开始传入需要的参数
apply()中只有两个参数,第一个参数和call()相同,第二个参数是个数组,所以只要把需要的参数放入数组中即可。
image.png
总结:call()和apply()可以改变this指向,但是传参列表不同。
4.obj.fun(),fun()中的this指向obj
举例:
say()由obj对象调用,所以say()中的this指向obj,所以这时输出的name是cherry,而不是sunny
image.png
image.png
网友评论