class中的箭头函数和普通函数的this指向

3,410 阅读1分钟

let foo = new Foo({name: foo, age: 2});

1. 通过实例调用方法;

1.1  foo.getName();

控制台打印:

1.2  foo.getAge();

控制台打印:

小结:
class中的方法如果是普通函数方法,该方法会绑定在构造函数的原型上;但是如果方式是箭头函数方法,该方法会绑定在构造函数上。通过上述方式调用class中的方法,无论是箭头函数方法还是普通函数方法,方法中的this都指向实例对象。

2. 通过方法的引用调用方法;

2.1  let getName = foo.getName;

       getName();

控制台打印:

2.2  let getAge = foo.getAge;

       getAge();

控制台打印:

小结:
1.  通过引用来调用箭头函数方法,方法中的this依然指向创建的实例对象。
原因:箭头函数中的this,只和定义改箭头函数的位置有关系,即,箭头函数中的this始终是该箭头函数所在作用域中的this。而箭头函数所在的作用域中的this指向foo实例对象。
2.  通过引用调用普通函数方法,方法中的this会指向undefined。
原因:因为普通函数中的this是动态绑定的,始终指向函数的执行环境,上面的例子中在全局环境中调用getAge方法,但是this确是undefined而不是window。原因在于class声明和class表达式中会默认使用严格模式。