背景
在写业务代码时,前端与服务端约定了多个code,为了更好的辨识和使用Error,前端自定义了多种Error类,因此自定义了多个新的Error类,并且使用ES6的extend语法继承内置Error
class CustomError extends Error {
constructor ({
code, message }) {
super(message);
this.code = code;
}
}
遇到的问题
在项目里使用CustomError的过程中,出现了以下的情况
const error = new CustomError({
code: -1, message: 'custom error' })
console.log(error instanceof CustomError) // true
console.log(error instanceof Error) // true
console.log(error.code) // -1
console.log(error.message) // ''
??? message竟然消失了
解决之路
1.难道继承代码没写对?
创建一个HTML文件(保证环境一致),将源代码粘贴过去,使用Chrome打开,结果如下
const error = new CustomError({
code: -1, message: 'custom error' })
console.log(error instanceof CustomError) // true
console.log(error instanceof Error) // true
console.log(error.code) // -1
console.log(error.message) // 'custom error'
??? 结果如此,意味着代码本身是没有问题的,那项目里的message消失的原因是什么呢?
2.寻找原因
一步步分析,项目的代码和直接运行的demo区别在于项目代码因为考虑浏览器兼容性,使用了babel进行编译,那难道是babel编译得有问题吗?于是将代码直接复制到babel的网址上看编译后的文件(项目的代码使用了webpack打包,不是很好查看)
"use strict";