this的思考
问题:JS中为什么要用this?
回答:因为this采用隐式“传递”一个对象的引用,所以可以将API设计得更加简洁和可复用
问题:JS中的this是什么?
背景:this是在运行时绑定的,this的上下文取决于函数调用的各种条件,又取决于函数的调用方式
本质:当一个函数被调用时,会创建一个活动记录(也称为执行上下文)。
这个活动记录会包含有这个函数在哪里被调用(调用栈)、这个函数的调用方式、传入的参数等信息。
this就是这个活动记录的一个属性,会在这个函数执行的过程中用到。
问题:JS中如何判断一个运行中函数的this绑定?
前提:首先我们要找到这个函数的直接调用位置
分析:
- 情况:由new调用?
判断:绑定到新创建的对象
- 情况:由call或者apply(或者bind)调用?
判断:绑定到指定的对象
- 情况:由上下文对象调用?
判断:绑定到上下文对象 - 情况:默认情况?
判断:绑定到全局对象
- 情况:严格模式下的默认情况?
判断:绑定到undefined
- 情况:ES6中的箭头函数
判断:根据当前的词法作用域来决定this