看来我来晚了:),但是讨论很有趣,所以..到这里去了...假设您要构建一个错误处理程序,并且正在使用自己的异常处理程序类,例如:
function errorHandler(error){
this.errorMessage = error;
}
errorHandler.prototype. displayErrors = function(){
throw new Error(this.errorMessage);
}
您正在像这样包装代码:
try{
if(condition){
//whatever...
}else{
throw new errorHandler('Some Error Message');
}
}catch(e){
e.displayErrors();
}
您很可能在单独的.js文件中具有错误处理程序。
您会注意到,在firefox或chrome的错误控制台中,显示的代码行号(和文件名)是抛出“ Error”异常而不是您真正想要进行调试的“ errorHandler”异常的行(文件)简单。抛出自己的异常是很好的,但是在大型项目中,定位异常可能是一个大问题,尤其是在它们具有类似消息的情况下。因此,您可以做的是将对一个实际的空Error对象的引用传递给错误处理程序,该引用将保存您想要的所有信息(例如,在firefox中,您可以获取文件名和行号等。 ;在chrome中,如果您读取Error实例的'stack'属性,则会得到类似的结果。长话短说,您可以执行以下操作:
function errorHandler(error, errorInstance){
this.errorMessage = error;
this. errorInstance = errorInstance;
}
errorHandler.prototype. displayErrors = function(){
//add the empty error trace to your message
this.errorMessage += ' stack trace: '+ this. errorInstance.stack;
throw new Error(this.errorMessage);
}
try{
if(condition){
//whatever...
}else{
throw new errorHandler('Some Error Message', new Error());
}
}catch(e){
e.displayErrors();
}
现在,您可以获取引发自定义异常的实际文件和行号。