[关闭]
@hucheng91 2017-10-09T16:38:41.000000Z 字数 1093 阅读 740

箭头函数里this指向问题

结论: 箭头函数 会动态绑定this,直到找到 外层第一个function,没有function的话就是全局的的对象

上代码

  1. import { Injectable } from '@angular/core';
  2. @Injectable()
  3. export class TestService {
  4. constructor() {
  5. // 箭头函数没有固定的this指定, 指向它外层第一的 function
  6. this.testCallBack(() => {
  7. console.log(this.getUserName());
  8. });
  9. this.testCallBack(function(){
  10. // 报错
  11. console.log(this.getUserName());
  12. });
  13. this.testCallBack(() => {
  14. // 测试包裹一层箭头函数 这个箭头外面没有function,执向全局的ts,也就是test.service.ts,所以找到getUserName()这个方法
  15. console.log(this.getUserName());// 测试包裹2层箭头函数,这个箭头外面没有function,执向全局的ts,也就是test.service.ts
  16. let testScopeThis = () => {
  17. console.log("王二麻子2");
  18. console.log(this.getUserName());
  19. }
  20. testScopeThis();
  21. // 测试包裹一层箭头函数后,用直接定义函数, this在当前这个function内,所以找不到getUserName()这个方法
  22. let testFunctionThis = function scopeFunctionThis(){
  23. console.log(this.getUserName());
  24. };
  25. testFunctionThis();
  26. });
  27. testCallBack(callback) {
  28. if (callback) {
  29. callback()
  30. }
  31. }
  32. getUserName() {
  33. console.log("张三");
  34. return "张三";
  35. }
  36. }

在没有箭头函数的年代,我们是如何解决,函数内的函数,调用函数外面的方法的勒

  1. 匿名函数

    1. // 一层层传递的,用的匿名函数的玩法,一层一层往里传
    2. this.testCallBack((function(testService){
    3. let testScope =(function(that){
    4. that.getUserName()
    5. })(testService);
    6. })(this));
    7. }

    对箭头函数要理解更深点可以参考mdn 箭头函数
    这是对箭头函数的一个总结,自己学习下,也希望大家可以了解下,

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注