this指向
常见的this指向:
常见的this指向 |
---|
全局下的this指向window |
函数中的this,谁调用指向谁 |
构造函数中的this指向构造函数的对象 |
对象中的this默认指向当前对象 |
事件处理函数中this谁触发指向谁 (指向触发事件的目标元素) |
定时器函数, this 指向 window |
箭头函数中没有this,但是箭头函数中出现this就去父域中找父域this指向谁就指谁 |
函数预编译过程中,this指向window |
区分this使用时指向问题:
- 第一步:看this在哪里
全局this指向window
- 第二步:区分在什么函数中
箭头函数中:this是找上一层作用域的this【你指向谁我就指向谁】
function函数:1)事件处理函数:this指向触发事件的对象
2)构造函数:this指向构造函数创建的对象
- 第三步:看是否有 bind() call() apply()
- 有 ----> this指向参数一对象
- 无 ----> 谁调用指向谁
注意:this.xxx = nnn 可能是重新赋值 或 添加属性
改变this指向
语法:method.apply() 、 method.call() 、method.bind()()
(一)call() 改变this指向:
当一个对象需要调用其他对象的函数时,可以通过 fun.call() 实现,fun是方法名。
call(参数一,参数二,、、、):
参数一:表示函数的拥有者,让谁调用函数
从第二个参数开始,依次是调用函数时需要传递的参数
(二)apply() 改变this指向:
与 call() 用法相似,区别是参数传递方式不同
call(参数一,[参数二]):
参数一:表示函数的拥有者
参数二:是一个数组,把需要传递的参数放入数组中
(三) bind() 改变this指向:
fun.bind() 会创建一个新的函数,新的函数和原函数功能相同
新的函数和原函数区别: 两个方法中的 this 指向不同,bind() 方法通过第一个参数指定了函数调用者(this的指向)
bind(参数一,参数二,、、、):
参数一:bind() 第一个参数传递谁,this指向谁
从第二个参数开始,是调用方法所需要的参数
bind() call() apply() 区别:
区别 |
---|
相同点: 都是【函数对象】中属性,改变【函数中】this指向 |
不同点: bind() : 【返回】被改变this的【函数】,手动执行(bind的返回值) call()、apply() :无返回值,自动触发函数。 |
call()、apply() 区别: apply 有两个参数,参二是数组; call 有N个参数 |