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 オブジェクトは正しいメッセージ セットを取得しません。
今私は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
利用可能な場合はそれも使用します。