如何正确的判断this

this基础

this是在es5中很多人都日你故意混淆的概念。如何正确判断this呢?先从一段代码说起

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function foo() {
console.log(this.a);
}

var a = 1;
foo();

var obj = {
a: 1,
foo: foo
}

obj.foo();

var c = new foo();

一般来说,谁调用了函数,谁就是this

  • 对于直接调用foo(),this一定是指向windows的
  • 对于obj.foo(),是obj这个对象调用了foo(), 所以this指向obj
  • 对于new来说,this指向new出来的实例上

箭头函数

对于箭头函数来说,是没有this的。如下面的代码来说,代码中的this只取决于最外层的foo。

1
2
3
4
5
6
7
function foo() {
return () => {
console.log(this.a)
}
}

foo()();