前端this面试题,着急了多想想就好了

谁调用方法,this就指向谁

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
const obj = {
length: 10,
log () {
console.log(this.length)
}
}

obj.log() //10,obj直接调用

const length = 20
const fn = obj.log

fn() // 0

/**
* 将log赋值给fn,相当于直接运行log方法
* 这里有个坑,好吧我的坑,以为是 20,忘了打印的是 this.length 了
* ES6 新特性,方法的 length 返回 参数的个数, 所以此处是 0
* */

const arr = [30, obj.log]

arr[1]() // 2

/**
* 这个和 直接执行 obj.log 挺像的,数组就是 特殊的 对象,
* console.dir(arr) 得到一个特殊的对象
* 所以数组执行方法 this.length 指向的是arr的length属性,
* 数组的 length 为 2
* */