Пользовательский Javascript Error.toString()
Мой пользовательский класс ошибок:
function MyError(message) {
this.message = message || "";
}
MyError.prototype = new Error();
MyError.prototype.name = "MyError";
MyError.prototype.toString = function() {
return "[" + this.name + "] " + this.message;
};
Если я бегу throw new MyError("test")
тогда консоль FF/IE показывает сообщение по умолчанию вместо ожидаемого [MyError] test
,
Как мне заставить двигатель JS использовать мой toString()
метод?
2 ответа
Решение
Я могу ошибаться, но я думаю, что вывод консоли в этом случае контролируется движком JS, и поэтому вы не можете отформатировать его, как я делал выше.
Вот как бы я унаследовал Error
(проверено и работает на FF v20):
function MyError(message) {
this.message = message || "";
}
MyError.prototype = Object.create(Error.prototype); // see the note
MyError.prototype.name = "MyError";
MyError.prototype.toString = function () {
return "[" + this.name + "] " + this.message;
}
console.log(new MyError("hello").toString()); // "[MyError] hello"
Обратите внимание, что старые браузеры могут не поддерживать Object.create
(СинтаксисES5), вы можете использовать эту прокладку, чтобы она работала.