Как можно пузыриться ошибки, таким образом, они могут быть пойманы в том же блоке попытки/выгоды?

У меня есть объект с функциями тот бросок ошибки,

myObj = {
  ini:function(){
    this.f();
  },
  f:function(){
   throw new Error();
  } 
};

но я только хочу поймать исключения, где объект создается

try{
  var o = new myObj();
}catch(err){
  alert("error!");
}

похоже, что у меня должны быть блоки попытки/выгоды везде = / для получения ошибочного события в различных функциональных объемах

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");
}

Но я только хочу получить от одного места = / Как я делаю это?

6
задан Justin Johnson 9 March 2010 в 20:28
поделиться

3 ответа

Заставьте свою функцию выбросить определенный тип объекта, а затем в блоке catch проверьте,чтобы увидеть if (err экземпляр MyExceptionObj) и обработать соответствующим образом, в противном случае повторно бросьте его.

Под повторным броском я имею в виду:

Если объект пойманного исключения не тот, с которым вы можете справиться, вы должны повторно бросить его, чтобы дать любым блокам перехвата возможность справиться с ним. Если ни один из них этого не сделает, браузер поймает его и отобразит ошибку 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;
   }
}

Вы, вероятно, не стали бы делать это в реальном мире.

8
ответ дан 9 December 2019 в 20:42
поделиться

Вы можете только условно перехватывать исключения в JavaScript 1.7 и выше. Обратитесь к следующему:

try {
  0();
} catch (ex if ex instanceof TypeError) {
  // only catch TypeErrors
}

В противном случае вы должны перехватить все исключения, выполнить проверку instanceof , а затем повторно выбросить исключения, если проверка вернет истину.

4
ответ дан 9 December 2019 в 20:42
поделиться

может быть, вместо того, чтобы выдавать ошибку и затем ее улавливать, вы могли бы просто вызвать функцию.

0
ответ дан 9 December 2019 в 20:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: