确定函数(方法)中的this的指向是一个很复杂的过程,也是考察候选者比较好的一个点。开发中,就直接打断点调试就行了,发现this的值不对,就改呀,改成箭头函数,或者用bind给绑定一下。但是,还是确定一些理论能力的。
原则
-
非箭头函数:谁调用,就指向谁;
new 构造器()。 构造器内部的this指向实例对象.方法()。 方法内部的this指向对象函数()。没有明确指定是谁在调用,那就理解为是window在调用,所以指向window。严格模式下就是undefined
-
call,apply,bind可以“显示地”改变this的值
-
箭头函数:内部没有this,有由外层函数中的this来确定;
这里有一题,请你来看看。
let length = 20
let obj = {
length: 100,
fn() { console.log(this.length) }
}
obj.fn() // 1. ?
const fn = obj.fn
fn() // 2. ?
const arr = [fn, 0,1,2]
arr[0]() // 3. ?