У меня есть объект с функциями тот бросок ошибки,
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");
}
Но я только хочу получить от одного места = / Как я делаю это?
Заставьте свою функцию выбросить определенный тип объекта, а затем в блоке 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; } }
Вы, вероятно, не стали бы делать это в реальном мире.
Вы можете только условно перехватывать исключения в JavaScript 1.7 и выше. Обратитесь к следующему:
try {
0();
} catch (ex if ex instanceof TypeError) {
// only catch TypeErrors
}
В противном случае вы должны перехватить все исключения, выполнить проверку instanceof
, а затем повторно выбросить исключения, если проверка вернет истину.
может быть, вместо того, чтобы выдавать ошибку и затем ее улавливать, вы могли бы просто вызвать функцию.