为什么要创建Error的派生类而不是直接使用Error?

问题描述 投票:0回答:1

继承

Error
类的目的是什么?

显示了从

Error
类继承的示例。

class InputError extends Error {}

function promptDirection(question) {
  let result = prompt(question);
  if (result.toLowerCase() == "left") return "L";
  if (result.toLowerCase() == "right") return "R";
  throw new InputError("Invalid direction: " + result);
}
for (;;) {
  try {
    let dir = promptDirection("Where?");
    console.log("You chose ", dir);
    break;
  } catch (e) {
    if (e instanceof InputError) {
      console.log("Not a valid direction. Try again.");
    } else {
      throw e;
    }
  }
}

我的问题是:

创建新类

InputError
的目的是什么?我们不能只使用
Error
代替
InputError
吗?

javascript class inheritance error-handling
1个回答
1
投票

如果您没有扩展

Error
来创建单独的
InputError
类,而只是抛出一个普通的
Error
,那么
if (e instanceof InputError)
将不起作用。

当然还有其他方法来区分错误(例如与错误

.message
进行匹配,或者 - 更安全 - 在自定义
.code
属性上),但是使用子类并使用
instanceof
构建错误层次结构是常见的并且反映了许多其他编程语言中使用的设计。

© www.soinside.com 2019 - 2024. All rights reserved.