我在这里

🏠 HOME 🗂️ DOCS 🔗 LINK 👴🏻 ABOUT
https://qiniu.sukoshi.xyz/src/images/cover/cover-07.jpg

关于removeEventListener里使用里bind不生效解决办法

2019-12-04 19:13

  • 笔记
  • js

现在写JS代码都流行用class了,自己在写一些东西都时候也会用。

但是在一个对象里如果绑定了某些事件需要在销毁时移除绑定,在使用bind的情况下不能正常移除。

这里单独记录一下,如下代码:

class User {

  constructor (name) {
    this.name = name;
    window.addEventListener("click", this.printName.bind(this));
  }

  name = "";

  printName () {
    console.log(this.name);
  }

  destroy () {
    window.removeEventListener("click", this.printName.bind(this));
  }

}

User类中printName方法需要访问自己到属性,如果在绑定事件时不将上下文指向自己,那么在printName中作用域会丢失,将会打印window.name;

但是在使用bind以后,destory方法中的移除事件并不会生效,众所周知如果事件需要解绑,那么函数不能使用匿名函数或直接function,因为每次返回的都是不同的函数,使用bind同理,返回的也是一个新的不同函数。

解决办法则是用一个属性去接收事件处理函数,则可以在多个地方使用:

class User {

  constructor (name) {
    this.name = name;
    window.addEventListener("click", this.eventClick);
  }

  name = "";

  // 这里保存事件函数
  eventClick = this.printName.bind(this);

  printName () {
    console.log(this.name);
  }

  destroy () {
    window.removeEventListener("click", this.eventClick);
  }

}

本文转自:https://blog.csdn.net/qq_40936253/article/details/84972259

JavaScript中的GC

2019-12-19 10:52

喜提驾照🥳🥳🥳

2019-09-24 10:36

Sukoshi

Sukoshi

不觉得鹿角即可爱又有攻击性吗(

Related Posts

  • 在CSS变量中使用SCSS变量无效
  • CSS使用字体新姿势 unicode-range用法与使用场景
  • ES6中的模块
  • zsh和oh-my-zsh常用配置和命令
  • 日语五十音
  • 五十音补充笔记

Categories

  • 笔记 20
  • 归档记录 9
  • 碎碎念 8
  • QAQ 7
  • doc 6
  • mv 3
show all

Tags

摄影 日常 js 浪 mongodb 日记 碎碎念 canvas cos css git github
show all

© 2022 Sukoshi.

蜀ICP备15014309号

Powered by Hugo Theme - kagome

🌞 light 🌛 dark 🤖️ auto