收藏
回答

TypeError : Number is not a function 应该如何解决?

公司项目暂时不能提供代码片段,自己测试写的小项目也无法复现这个问题,下面是报错截图:

全部是在WASerivce中的报错,我无法依据这个报错来定位问题,只能靠自己猜测,下面是我的尝试:

  1. 之前将自定义组件中所有Number属性(Property)定义改为简写模式,暂时没有报错了
  2. 还有一次将某个自定义组件中的所有Number属性(Property)初始化的值设定为非0值,又好了一会
  3. 查询过StackOverFlow,都说是之前定义了变量,最后却当成函数在用,所以导致了这个问题,我的印象中没有这种操作,我的习惯就不是这样的,应该不会出现函数和变量同名的情况
  4. 更换过开发者工具的版本, 1.03.2006090, 1.02.1910120,现在是1.03.2007151 RC Build,都没有解决问题,大概率排除是开发者工具的问题
  5. 问题应该是出在某个自定义组件定义的Property身上,但是我一直没有找到

如上所述,请求援助,另外,请教大家,每次遇到这种全部定位到都不是自己写的代码文件中的报错,一般性的解决思路是什么样?

我每次看到那些e.invokeXXX,o.setPropertyXXX, a.doUpdateXXX这种东西就头皮发麻,变量都是这种看不出含义的写法,甚至像这种WAService代码还被隐藏了,根本不是我写的代码,我要如何定位错误呢?只能靠推理吗(这一推理半天就过去了,有时候还解决不了问题,根本就是在浪费时间啊)

回答关注问题邀请回答
收藏

1 个回答

  • 乐宇
    乐宇
    2020-08-07

    更新一下我目前自己的测试步骤:

    1. 将报错页面所引入的所有组件的js脚本中所有有关Number类型的属性全部注释,运行成功,没有再报错Number is not a function
    2. 将所有三个组件的属性分别取消注释,编译运行,三次都报错(Number is not a function),如问题描述中的图片
    3. 新建MiniProgram4,在自定义组件中定义Number类型的Property并运行,没有报错
    4. 检查过每一个自定义组件的脚本,没有发现Property和data中的字段同名的情况,也没有发现Property或data中的字段和自己写的函数同名
    5. 怀疑过是不是observers中的监听函数和被监听的变量同名导致的(意思就是开发工具有问题),但是没有写监听函数的组件,也会在Number类型中出现这个问题,所以放弃考虑
    6. 注释掉其他两个自定义组件中Number类型的property,将剩下一个自定义组件脚本中所有Number的Property类型改为String,成功进入该页面,没有报错
    2020-08-07
    有用
    回复 2
    • 乐宇
      乐宇
      2020-08-07
      没老哥回答的话我今天又凉了~~
      2020-08-07
      回复
    • cxz.
      cxz.
      2020-08-07回复乐宇
      没代码很难猜测问题
      2020-08-07
      回复
登录 后发表内容
问题标签