【问题标题】:instanceof custom error class returning false [duplicate]instanceof 自定义错误类返回 false [重复]
【发布时间】:2017-01-18 12:15:04
【问题描述】:

为什么这会导致错误?

'use strict';

class InvalidCredentialsError extends Error {
  constructor(msg) {
    super(msg);
    this.name = 'InvalidCredentialsError';
  }
}

const err = new InvalidCredentialsError('');

console.log(err instanceof InvalidCredentialsError);

但这会返回 true:

console.log(err instanceof Error);

【问题讨论】:

  • 什么是err?你的意思是const errClass = new InvalidCredentialsError(); console.log(errClass instanceof Error);
  • 在您提供的代码中,err 也看起来像 undefined,而 errClass 不是类实例,而是对类本身的引用。
  • @evolutionxbox 道歉!我忘了复制完整的代码!现在更新了:)
  • 这很奇怪。当我在 Chrome 中运行此代码时,我得到 truetrue
  • 这是一个转译器限制。另请参阅this

标签: javascript


【解决方案1】:

这行得通...您需要构造一个您的类型的instance,然后instanceof 将返回您的对象是否确实是该类型的一个instance

'use strict';

class InvalidCredentialsError extends Error {
  constructor(msg) {
    super(msg);
    this.name = 'InvalidCredentialsError';
  }
}

var err = new InvalidCredentialsError("Hello, world!");

console.log(err instanceof InvalidCredentialsError); // true

注意 const errClass = InvalidCredentialsError; 只会为您的类型创建一个别名,因此您可以这样做...

var err = new errClass("Hello, alias");
console.log(err instanceof errClass); // true

【讨论】:

  • @KarlMorrison,这很奇怪......我在 FireBug 控制台和 Chrome 控制台中运行了相同的代码,我得到了真正的 x2。
  • @series0ne 它是 babel 或 codepen 错误。 OP 刚刚添加了他们看到的屏幕截图。
  • 一定是 babel 错误,因为我在节点中得到了相同的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多