首页 > 解决方案 > 如何动态扩展许多错误类?

问题描述

我可以声明扩展的错误类,如:

class NotFoundError extends Error {
  constructor (message) {
    super(message)
    this.name = 'NotFoundError' // for log
  }
}

然后评估:

if (error instanceof NotFoundError) {
  ...
}

如何动态声明许多错误,最好是在 ES5 语法中?

declareErrors(['NotFoundError', 'TimeoutError', 'AclError', ...])

标签: javascript

解决方案


很简单,使用匿名类表达式并将其分配给全局变量:

function declareError(name) {
  window[name] = class extends Error {
    constructor (message) {
      super(message)
      this.name = name;
    }
  }
}
function declareErrors(errors) {
  errors.forEach(declareError);
}
declareErrors(['NotFoundError', 'TimeoutError', 'AclError']);

const error = new AclError("Bad Darius!");
console.log(
    error.name,
    error.message,
    error instanceof Error,
    error instanceof AclError
);


推荐阅读