记录一个在工作中实际遇到的问题。
问题描述:
昨天被报告了我报表项目新建的模版无法显示且报错了。检查了一下发现控件类型全部错误,且被修改为’t’。这个让我有点懵了,不知道为什么。检查自己代码,没有发现这个修改的字眼,询问同事是否有修改过代码或者传进来的模版是否有自己添加了其他内容。都没有。重新编译部署,问题仍在。本地测试却没有问题。直到今天加入日志打印,在线上环境调试,于是发现了问题所在。
错误所在:
如图1,在注册控件的时是没有问题的,所传入参数都是正常,但是在生成完实例之后,每一个实例的类型都为’t’
如图2,实例展开时候,显示实例类型为’t’,’type’字段也为’t’。于是发现问题就在此,因为我的’type’字段使用的是
1 | this.type = this["constructor"]["name"]; |
直接取当前类名作为’type’字段的值,但是因为通过webpack打包后,代码被压缩了,类名被压缩,此时再去取类名作为’type’字段的值就出错了。
解决:
在基类将’type’设为抽象属性abstract,所有派生类全部重写’type’,直接写死内容.因为这个字段是不能被修改的,所以写死不会影响后续。