【发布时间】:2012-07-29 08:02:30
【问题描述】:
对于错误报告,我想在我拥有的每个函数的代码周围插入一个 try-catch 包装器。
所以基本上我想替换
function foo(arg){
bar();
}
...与...
function foo(arg){
try {
bar()
}
catch(e){
customErrorHandler(e)
}
}
有没有一种方法可以将这种通用的 try-catch 应用到所有函数,而无需手动编辑所有函数?比如修改Function对象的原型?
编辑
为什么我想尝试捕获我的所有功能: 我正在构建一个在 iOS 和 Android 上发布的 HTML5 应用程序。我可以从我目前的基本 javascript 错误报告中看出,即使应用程序在我自己的设备上运行良好,但在其他一些设备上确实会发生错误。
我的目标是双重的:每当某人的设备上发生 javascript 错误时...
- 我想通知用户该应用可能无法正常运行
- 我想大致知道错误发生在哪里,所以我知道到哪里寻找问题
【问题讨论】:
-
否 - 如果函数实际上不包含 try-catch,您可以仅将函数的 调用 包装在 try-catch 中,但不能将其内容包装起来。对于它的价值,用 try-catch 语句覆盖你的代码是一个非常糟糕的主意。如果有错误,你应该解决它,不允许它发生,而是通过 try-catch 抑制它。
-
+1 表示希望正确尝试捕获所有功能。不过,我认为您将不得不手动编辑它们。
-
Try-catch 非常昂贵。你确定你要这么做吗?有什么要求?
-
你也可以用一个try catch将入口点包装到代码中......错误会冒泡。这不一定适用于附加事件处理程序等,但任何嵌套在第一个函数中的函数都会简单地将错误冒泡。
-
@KingOfHypocrites,你的回答听起来很有趣,但我没有完全理解。 “使用单个 try-catch 将入口点包装到代码中”是什么意思?你的意思是我应该把我所有的 javascript 都放在一次尝试中{}?
标签: javascript error-handling try-catch prototype