Пользовательский 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), вы можете использовать эту прокладку, чтобы она работала.

Другие вопросы по тегам