虽然调试器显示对象

时间:2016-06-08 18:59:53

标签: javascript inheritance typescript prototype

我有这个简单的函数应返回true console debugger

虽然我返回false,但是控制台调试器显示这是UIError对象。尽管如此:

exception.originalException instanceOf UIError

返回false!我在调试器中看到它确实是一个UIError类。为什么?

UIError扩展了错误类

enter image description here

private isAnUIError(exception: any): boolean {
    return (exception.originalException) instanceof UIError || exception instanceof  UIError;
}

export class UIError extends Error {
constructor (private message: string) {
super();
this.message = message;
 }

1 个答案:

答案 0 :(得分:0)

如果打字稿像Babel ES6那样Error不能像普通类一样扩展。这是JavaScript中令人讨厌的疣。解决方法是直接管理新错误的原型。我在another SO Answer中对ES6和Babel的解释进行了解释。

以下是我希望看到的内容:

class UIError {
  constructor(message) {
    this.name = 'UIError';
    this.message = message;
    this.stack = new Error().stack; // Optional
  }
}
UIError.prototype = Object.create(Error.prototype);

请注意super()Error不执行任何操作,因为Error 不是典型的构造函数(类)。这意味着无需执行

Error.apply(this, [].slice.call(arguments, 0))

(这基本上是super()的作用),因为Error()函数不会对this执行任何操作,而是返回新的错误。这是关于JavaScript中Error的一个警告。