gpt4 book ai didi

javascript - 使用 ES6 语法和 Babel 扩展 Javascript 中的错误

转载 作者:IT王子 更新时间:2023-10-29 02:38:23 25 4
gpt4 key购买 nike

我正在尝试使用 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 对象永远不会得到正确的消息集。

Try in Babel REPL .

现在我已经看到了一些关于 SO ( for example here ) 的解决方案,但它们看起来都非常不符合 ES6-y。如何以一种漂亮的 ES6 方式做到这一点? (那是在 Babel 中工作)

最佳答案

根据 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,你需要 transform-builtin-extend ( npm ) 让它工作。

关于javascript - 使用 ES6 语法和 Babel 扩展 Javascript 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31089801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com