你怎么能冒出错误,以便它们可以被捕获在同一个try/catch块中?

qod*_*nja 5 javascript error-handling

我有一个带有抛出错误的函数的对象,

myObj = {
  ini:function(){
    this.f();
  },
  f:function(){
   throw new Error();
  } 
};
Run Code Online (Sandbox Code Playgroud)

但我只想捕捉创建对象的异常

try{
  var o = new myObj();
}catch(err){
  alert("error!");
}
Run Code Online (Sandbox Code Playgroud)

看起来我必须尝试/ catch块到处= /捕获不同功能范围内的错误事件

try{
    myObj = {
      ini:function(){
        try{
          this.f();
        }catch(err){
         alert("f threw an err");
        }
      },
      f:function(){
       throw new Error();
      } 
    };
}catch(err){
 alert("error happend while crating Obj");
}
Run Code Online (Sandbox Code Playgroud)

但我只想从一个地方捕获= /我该怎么做?

And*_*rew 8

让你的函数抛出一个特定类型的对象,然后在catch块中检查以查看if (err instanceof MyExceptionObj)和处理,否则重新抛出它.

通过重新投掷我的意思是:

如果捕获的异常对象不是您可以处理的异常对象,则应该重新抛出它以使任何catch块进一步有机会处理它.如果没有,浏览器将捕获它并显示JS错误.

try {
   if ($.browser.msie) {
      throw new UnsupportedBrowserException();
   }
} catch (ex) {
   if (ex instanceof UnsupportedBrowserException) {
      alert('Your browser isn't supported.');
   } else {
      // We don't know how to handle this exception, throw it back.
      throw ex;
   }
}

你可能不会在现实世界中这样做.

安德鲁

  • 为什么你不"在现实世界中做到这一点"? (5认同)
  • 嗯,这是否意味着 try 只捕获被调用函数抛出的异常,而不捕获它们调用的函数?我读到的原始问题是“我需要在每个级别捕获异常吗?”,这个答案意味着“是”?重新抛出很好,但我希望异常会出现,但他们似乎没有这样做。 (2认同)