代码之家  ›  专栏  ›  技术社区  ›  Axel Stone

无法删除包装函数中存储了bind(this)的事件侦听器

  •  0
  • Axel Stone  · 技术社区  · 5 年前
    class Scroller {
      public listenerWrap = null;
      public elem = document.querySelector('.elem');
    
      addListener() {
        this.listener = this.listener.bind(this);
        this.elem.addEventListener('scroll', this.listenerWrap);
      }
    
      listener() {
        console.log('scroll', this);
      }
    
      removeListener() {
        this.elem.removeEventListener('scroll', this.listenerWrap);
      }
    }
    
    var s = new Scroller();
    s.addListener();
    s.removeListener();
    

    这是我正在使用的代码的简化版本。我想添加和删除需要 this 绑定。所以我要把 绑定的 侦听器函数 listenerWrap 变量,以便添加和删除完全相同的函数。

    问题是事件侦听器没有被删除,我仍然看到 console.log 滚动元素时输出。

    0 回复  |  直到 5 年前