箭头函数不适用的场景

161 阅读1分钟

在如今开发者习惯于适用箭头函数来对this指向进行干扰,那么反过来说,不需要进行this指向干扰的情况是不是就不适合箭头函数?

  • 构造函数的原型方法需要通过 this 获得实例,因此箭头函数不可以出现在构造函数的原型方法上

    function Ad() {
      this.da = "ppp";
    }
    
    Ad.prototype.of = () => {
      console.log(this); //{}
    };
    
    Ad.prototype.df = function () {
      console.log(this);//{da:"ppp"}
    };
    
    let ad = new Ad();
    ad.of();
    ad.df()
    
  • 对于需要获得 arguments 时,箭头函数不具有 arguments 属性,因此在其函数体内无法访问这一特殊的伪数组

    function cs() {
      console.log(arguments);//[1,2,3,4]
    }
    
    let da = () => {
      console.log(arguments);
    };
    
    cs(1,2,3,4)
    da(1,2,3,4,)
    
  • 定义一个对象方法时,预期在方法中通过 this 访问对象实例,在下面代码中,getName函数体内的this执行 window,这显然不符合其用意

    const peronst = {
      name: "cs",
      getName: () => {
        console.log(this);
      },
    };
    peronst.getName();
    
  • 在使用动态回调时,对于类似下面这种对回调的this有特殊场景需求的用法,监听函数的this便无法满其需求,下面代码中事件绑定函数的this指向了window。

    let btn = document.getElementById("btn");
    btn.addEventListener("click", () => {
      console.log(this === window);
    });