При выполнении этого фрагмента через BabelJS:
class FooError extends Error {
constructor(message) {
super(message);
}
}
let error = new FooError('foo');
console.log(error, error.message, error.stack);
выводит
{}
что я не ожидаю. Запуск
error = new Error('foo');
console.log(error, error.message, error.stack);
производит
{} foo Error: foo
at eval (eval at <anonymous> (https://babeljs.io/scripts/repl.js?t=2015-05-21T16:46:33+00:00:263:11), <anonymous>:24:9)
at REPL.evaluate (https://babeljs.io/scripts/repl.js?t=2015-05-21T16:46:33+00:00:263:36)
at REPL.compile (https://babeljs.io/scripts/repl.js?t=2015-05-21T16:46:33+00:00:210:12)
at Array.onSourceChange (https://babeljs.io/scripts/repl.js?t=2015-05-21T16:46:33+00:00:288:12)
at u (https://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.min.js:28:185)
что я хотел бы получить от расширенной ошибки.
Моя цель - расширить Error
на множество подклассов и использовать их в сопоставлении bluebird catch
. До сих пор это терпит неудачу.
Почему подкласс не показывает трассировку сообщения или стека?
Изменить: с использованием встроенного подкласса Chrome (благодаря @coder) отлично работает. Это не относится к Вавилону, обязательно, как в следующем примере (из @loganfsmyth на канале Babel gitter):
// Works
new (function(){
"use strict";
return class E extends Error { }
}());
// Doesn't
new (function(){
"use strict";
function E(message){
Error.call(this, message);
};
E.prototype = Object.create(Error);
E.prototype.constructor = E;
return E;
}());