JS中this的指向
本文最后更新于:2024年4月16日 下午
学习Javascript时遇到说this指针的指向问题,因此查找了一些博客教程,作为个人学习的总结。
首先要明确Js中的this指向并不是在定义时确定的,而是在具体的对象调用函数时确定,即哪个对象调用了函数,函数中的this就指向哪个对象,函数的调用方式决定了this的指向。
Js中的函数调用有:直接调用、方法调用、构造函数调用。还有特殊的例如bind()绑定后调用、通过call()、apply()调用、箭头函数调用
1.直接调用
直接调用,就是通过 函数名(...)
这种方式调用,此时函数内部的this指向的时全局对象。
(浏览器中全局对象时window,在NodeJs中全局对象时global)
1 |
|
注:直接调用并不是在全局作用域下调用,任何作用域下直接通过函数名(...)
对函数调用都称为直接调用。
bind()对直接调用的影响
Function.prototype.bind()
的作用是将当前函数与指定的对象绑定,并返回一个新函数,这个新函数无论以什么样的方式调用,其 this
始终指向绑定的对象。
1 |
|
2.方法调用
方法调用是指通过对象来调用其方法函数,是以对象.方法函数(...)
的形式调用
1 |
|
当有多个对象调用时:虽然test1.getName是由test2.getName赋值得到,但调用的是test1,this指向test1
1 |
|
3.构造函数调用
在ES5中,每个函数都可以当作构造函数,通过new调用来产生新的对象实例,其中的this指向这个对象。
1 |
|
4.使用call()、apply()
call()和apply()简单来说就是会改变传入函数的this
1 |
|
call与apply的用途:
- 改变this的指向
- 方法借用
call与apply的区别:
二者作用相同,只是参数不同
- call参数不固定,
acll(thisArg [ ,arg1,arg2,...])
,第一个参数是this指向,后面使用参数列表 - apply参数固定,
apply(thisArg [,argArray])
,第一个参数是this指向,第二个是参数数组
5.箭头函数调用
首先,ES6提供的箭头函数中,并没有this,箭头函数中的this是继承的外部环境,即直接包含它的那个函数或函数表达式中的this。
1 |
|
它本身是没有绑定 this
的,它用的是直接外层函数(即包含它的最近的一层函数或函数表达式)绑定的 this
。
注:箭头函数不能new调用,bind也不起作用。