我猜测我的问题的答案是否定的,但由于我对Error.prototype
的工作原理不够了解,我认为值得一提:有没有办法改变错误来自Javascript错误的消息?
例如,如果我收到错误:
TypeError: (intermediate value) is not iterable
有没有办法改变一些事情,我得到了:
TypeError: You expected an array but it wasn't an array dummy!
我考虑使用全局错误处理程序然后重新抛出它们,但这只适用于未捕获的错误。是否有Error.prototype
方法我可以改变(或任何其他方式)来做到这一点?
一点也不重要,只是好奇。
编辑:只是澄清两点:
1)我理解try
/ catch
的工作原理,但我要问的是,是否有办法控制之前生成的消息抛出/捕获错误(可能是通过覆盖Error.prototype
的方法)。
2)回答"没有办法做到这一点,所有JS错误消息的生成都在内部处理,JS代码无法控制它"将是完全合法的(......如果是这样的话)。
答案 0 :(得分:2)
您必须覆盖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
答案 1 :(得分:0)
我讨厌回答我自己的问题,但我在MDN上找到了这条线,似乎很清楚地回答了这些问题:
全局Error对象不包含自己的方法,但它确实通过原型链继承了一些方法。
由于它通过原型链的唯一方法是toString
和toSource
(两者都没有控制错误生成的消息),所以它出现了(除非我错过了一些其他的机制,不是' t Error.prototype
- 相关的)没有办法完成我的要求。
答案 2 :(得分:-1)
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
HIH,