重开此帖。 严重bug, 用class定义的事件在运行的时候提示找不到

发布于 8 年前作者 xiaping18298 次浏览最后编辑 8 年前来自 ask

刚才举的例子不够清晰,那我再举一个吧

wxml

<view bindtap="tapTab"></view>

js

class Home {
  tapTab() {
    console.log("tab");
  }
  onPullDownRefresh() {
    console.log("refresh");
  }
  onReachBottom() {
    console.log("bottom");
  }
  onLoad() {
    console.log("onLoad");
  }
}
 
Page(new Home());

请官方人员先不要急着标记为已解决。

按照上一个帖子里哥们说的意思事件不能定义到原型里https://developers.weixin.qq.com/blogdetail?action=get\_post\_info&amp;lang=zh\_CN&amp;token=512271115&amp;docid=a5d216e91ba2550a23ad87b3044ef841)

,好  那为什么onLoad会执行呢,请给我一个解释

6 回复
qiang33
qiang331 楼6 年前

这只是个示例。。。

na97
na972 楼6 年前
<view bindtap="tapTab"></view>

你这个标签里面什么都没有,怎么可能找得到?

juanguo
juanguo3 楼6 年前

好吧,也许是我提问的方式有问题(先道个歉)。 不能说是严重bug 我不知道你们怎么实现的但是从开发者角度俩说,希望能解决这个问题。

pliang
pliang4 楼6 年前

这个 回答 是正确的

但是为什么onload 或者 onshow 能执行呢?

因为 onload onshow 是小程序框架 “明白” 的方法,那么在相应的生命周期中就会去调用这个方法,而别的又不能枚举到,框架又不知道,自然是找不到的了

taomao
taomao5 楼6 年前

一个迂回的解决方案 可以解决这个问题

chaoxiao
chaoxiao6 楼6 年前

从官方的角度来说,也很欢迎开发者热情反映问题,这样大家都能从中汲取到知识,学习成长。

这里的话是这样的:

当实例化Page的时候,传入一个对象作为参数。

  1. 先检查该对象的key有没有预先定义的保留字

  2. 用一个预先存在的方法名列表(eg:onLoad,onShow等等)检查其中有无关于页面lifeCycle的方法

  3. 使用for in迭代取对象中的自定义方法

回到你的问题:

  1. class定义的原型方法的propertyIsEnumerable为false,无法使用任何迭代接口遍历到

  2. 至于onLoad这种有关页面lifeCycle的方法,是直接使用object[key]的方式去调用,自然就能调用到

最后,请注意社区管理规定有提到,注意不要使用不文明的语言对他人进行负面评价

以上。