this 指向
-
this 是一个使用在作用域里面的关键字
- 每一个作用域里面都会有一个 this
- 不同的作用域里面的 this 不一样
- 只有函数能生成私有作用域
- 除了全局作用域以外, 每一个函数里面都有一个 this(箭头函数除外)
-
再全局作用域里面使用 this 的时候
- this => window
-
在函数里面使用 this 的时候
- 不看函数的定义方式, 不看函数定义在哪里, 只看函数的调用方式
- 全局调用
函数名() this => window - 对象调用
对象名.函数名() this => 点前面是谁就是谁 - 定时器处理函数
setTimeout(function () {}, 0) this => window
setInterval(function () {}, 0) this => window - 事件处理函数
div.onclick = function () {} this => 事件源(绑定在谁身上的元素)
div.addEventListener(‘click’, function () {}) this => 事件源 - 自调用函数
(function () {})() this => window
!function () {}() this => window
~function () {}() this => window - 箭头函数
() => {} this => context(上下文)
官方解释: 箭头函数外部作用域的 this 就是箭头函数里面的 this
私人解释: 你书写箭头函数的上一行的 this 是谁, 箭头函数里面的 this 就是谁 - 构造函数
构造函数里面的 this 就是 当前实例
前提: 要和 new 关键字连用
let obj = new Person()
this => obj
-
改变this指向
- fn.call(新的指向)
执行函数,并且在执行中改变this的指向 - fn.bind(新的指向)
不执行函数,改变this指向,并且返回一个新的函数