【已解决】wx.onShow(), wx.offShow() 无法解除绑定的问题求解 cocos 2.3.3

我的使用方式是这样, 在开始监听的时候使用 wx.onShow(this.onGameShow.bind(this)), 然后在取消监听的时候使用 wx.offShow(this.onGameShow.bind(this)),结果是 ==> 没法解除绑定!!!这是什么鬼问题?

后边我 去掉了bind(this) 之后,也就是在监听的时候使用 wx.onShow(this.onGameShow), 然后在取消监听的时候,使用 wx.offShow(this.onGameShow) 这样是 没问题的!!!可以帮我成功解绑 ,但是这里的问题就是,this的指向并非我脚本对应的node节点!!!

所以,这里是我的用法问题???路过的大神指点一下迷津谢谢

知道原因所在了,看来我的基础还是不够。在此解释问题原因以及解决方案,也可以帮助后边踩到这个坑的小伙伴们

原因

先来一个小demo =>

解释: bind的用法,是对原函数加了一层包装,这样造成的问题就是,二者并不是同一个函数


回到原本的 wx.onShow(this.onGameShow.bind(this)) wx.offShow(this.onGameShow.bind(this)) 不能解绑的问题。
this.onGameShow.bind(this)这句话每次都会创建一个新的方法,这样导致的问题就是,我上边用的wx.offShow(this.onGameShow.bind(this))解绑解的 并不是 当初绑定的那个函数,而是在原函数的基础上又 新产出一个新的函数 !!!二者并非全等的关系。因此才导致了解绑失败!!!

解决方案:

为了既能够绑定this, 又能够进行事件解绑。

  • 可以考虑在拿到this.onGameShow.bind(this)之后
  • 先用变量func存起来,并且在使用wx.onShow()进行事件绑定的时候,绑定func, 用法: wx.onShow(func)
  • 在需要解绑的时候,使用的是wx.offShow,用法:wx.offShow(func)

最后附上demo 的 funcobj.func方法调用结果