ES6構文とBabelを使用してJavaScriptのエラーを拡張する質問する

ES6構文とBabelを使用してJavaScriptのエラーを拡張する質問する

ES6 と Babel を使用して Error を拡張しようとしています。うまくいきません。

class MyError extends Error {
  constructor(m) {
    super(m);
  }
}

var error = new Error("ll");
var myerror = new MyError("ll");
console.log(error.message) //shows up correctly
console.log(myerror.message) //shows empty string

Error オブジェクトは正しいメッセージ セットを取得しません。

Babel REPLで試す

今私はSOでいくつかの解決策を見てきました(例えばここ) ですが、どれも ES6 らしくないようです。これを ES6 らしいやり方でうまくやるにはどうすればいいでしょうか? (これは Babel で動作しています)

ベストアンサー1

Karel Bílek の回答に基づいて、次の点に少し変更を加えますconstructor

class ExtendableError extends Error {
  constructor(message) {
    super(message);
    this.name = this.constructor.name;
    if (typeof Error.captureStackTrace === 'function') {
      Error.captureStackTrace(this, this.constructor);
    } else { 
      this.stack = (new Error(message)).stack; 
    }
  }
}    

// now I can extend

class MyError extends ExtendableError {}

var myerror = new MyError("ll");
console.log(myerror.message);
console.log(myerror instanceof Error);
console.log(myerror.name);
console.log(myerror.stack);

MyErrorこれはスタックに印刷され、汎用には印刷されませんError

また、スタック トレースにエラー メッセージも追加されますが、これは Karel の例には含まれていませんでした。

captureStackTrace利用可能な場合はそれも使用します。

Babel 6では、変換組み込み拡張ネプ) が必要です。

おすすめ記事