this指向
一个使用在作用域内的关键字
在全局使用,指向window
在函数内使用,this指向函数的context(执行上下文)
函数内的this,和函数如何定义没有关系,和函数在哪定义没有关系,只看函数是如何被调用的
几种调用方式,决定了this指向
1 普通调用
函数名()
该函数内的this指向window
2 对象调用
对象名.函数名()
对象名['函数名']()
数组[索引]()
this指向 点. 前面的内容,也就是该对象或数组
3 定时器处理函数
setTimeout()
setintervel()
this指向window
4 事件处理函数
事件源.on事件类型=事件处理函数
事件源.addEventListener('事件类型',事件处理函数)
this指向事件源
5 自执行函数
this指向window
6 箭头函数
this指向上下文
7 构造函数相关的 this
1. 构造函数体内的 this
因为和 new 关键字连用, 所以指向了 当前实例
2. 构造函数 prototype 中方法里面的 this
原型上的方法因为是被 当前实例 调用的
this 指向了 当前实例
强行改变this指向 call apply bind
1 call 跟随函数名后面调用
函数名.call() 对象名.函数名.call()等等
修改函数内的this指向
参数:
第一个参数,函数内的this指向,写什么就指向什么
第二个参数开始,依次给函数传递实参
特点:立即调用
2 apply 跟随在函数名后面调用
函数名.apply()
对象名.函数名.apply()等等
修改函数内的this指向
参数:
第一个参数:函数内的this指向
第二个参数:是一个数组或伪数组,里面的每一项依次给函数传递实参
特点:立即调用函数
事件处理函数,定时器函数,一般不会使用这个方法
特殊作用:改变给函数传递参数的方式
3 bind 跟随函数名后面调用
函数名.bind()
对象名.函数名.bind()
意义:修改函数内的this指向
参数:
第一个参数:函数内的this指向
第二个参数开始:依次给函数传递实参
特点:
不会立即调用函数,返回一个改变了this指向新的函数
特殊作用:改变一些不会立即执行的函数内的this指向