Я предполагаю, что ответ на мой вопрос - нет, но поскольку я не знаю достаточно о том, как работает Error.prototype
я понял, что стоит спросить: есть ли способ изменить сообщения об ошибках из ошибок в Javascript?
Например, если я получаю сообщение об ошибке:
TypeError: (intermediate value) is not iterable
есть ли способ изменить то, что я вместо этого получаю:
TypeError: You expected an array but it wasn't an array dummy!
Я подумал об использовании глобального обработчика ошибок, а затем их переуплотнения, но это будет работать только для неперехваченных ошибок. Есть ли способ Error.prototype
который я могу изменить (или любым другим способом) для этого?
Совсем не важно, просто любопытно.
EDIT: просто для уточнения двух моментов:
1) Я понимаю, как работает try
/catch
, но я спрашиваю, есть ли способ управлять сообщениями, сгенерированными до того, как ошибка будет выброшена/поймана (предположительно, переписав метод Error.prototype
).
2) Ответ "нет, нет никакого способа сделать это, все генерирование сообщений об ошибках JS обрабатывается внутренне, а JS-код не имеет возможности контролировать его", было бы совершенно законным (... если это произошло).
Вы должны переопределить класс TypeError
, а не один из этих методов.
const overridableMessages = [{
search: 'TypeError: (intermediate value) is not iterable',
replace: 'TypeError: You expected an array but it wasn\'t an array dummy!'
}]
class TypeError extends window.TypeError {
constructor (message) {
super(message)
overridableMessages.forEach((overridableMessage) => {
if (this.message === overridableMessage.search) {
this.message = overridableMessage.replace
}
})
}
}
window.TypeError = TypeError
Я ненавижу отвечать на свой вопрос, но я нашел эту строку в MDN, которая, кажется, довольно четко отвечает на вещи:
Глобальный объект Error не содержит собственных методов, однако он наследует некоторые методы через цепочку прототипов.
Поскольку единственные методы, которые он получает через цепочку прототипов, - toString
и toSource
(ни один из которых не управляет сообщением об ошибке), он появляется (если мне не хватает какого-либо другого механизма, который не является Error.prototype
-related), что есть я не мог выполнить то, что я спросил.
message
об ошибке. Вы можете попробовать заменить конструкторы своими собственными, которые могут переопределить сообщение, но нет гарантии, что они в конечном итоге будут использовать то, что они не сохраняют ссылку на исходный конструктор внутри. Это может отличаться в разных реализациях.
window.onerror = function(msg, url, linenumber) {alert('Error : '+msg+'\nURL: '+url+'\nLine Number: '+linenumber);return true;}
// general error handler
Также:
try {
}
catch(err) {
alert(err); // here put your case with your messages.
}
// routine error handler
Е.И.В.,
window.onerror =
) будет обрабатывать только неперехваченные ошибки, а что касается обнаруженных ошибок ... Я не спрашивал, как перехватывать ошибки, а спрашивал, как изменить ошибку сообщения JS генерирует.
try..catch..finally
?