Naudotojų išimčių išjungimas javascript. Kokį stilių naudoti?

„Douglas Crockford“ rekomenduoja tai daryti:

 throw { name: "System Error", message: "Something horrible happened." }; 

Bet jūs taip pat galite tai padaryti:

 function IllegalArgumentException(message) { this.message = message; } throw new IllegalArgumentException("Argument cannot be less than zero"); 

tada vykdykite:

 try { //some code that generates exceptions } catch(e) { if(e instanceof IllegalArgumentException) { //handle this } else if(e instanceof SomeOtherTypeOfException) { //handle this } } 

Darau prielaidą, kad į Crockford įgyvendinimą galite įtraukti type turtą ir tada jį išnagrinėti vietoj vykdymo. Ar yra kokių nors pranašumų darant vieną prieš kitą?

21
26 окт. nustatė Vivin Paliath 26 spalis 2012-10-26 00:36 '12 0:36 2012-10-26 00:36
@ 2 atsakymai

Atkreipkite dėmesį, kad nors dauguma „JavaScripts“ aplinkų suteikia klaidos objektą kaip išimčių pagrindą. Jame jau galite apibrėžti pranešimą, bet taip pat yra naudinga kamino savybė stebint išimties kontekstą. Galite sukurti savo tipo išimtis naudodami prototipinį paveldėjimą. Jau yra keletas diskusijų naudojant stackoverflow (pavyzdžiui: čia ), kaip tai padaryti teisingai. Tačiau turėjau šiek tiek kasti, kol aš suradau teisingą ir modernų požiūrį. Atminkite, kad „Mozilla“ dokumentuose pasiūlytas metodas (žr. Aukščiau) nepageidauja „stackoverflow“ bendruomenės. Po daugybės skaitymo išėjau šį požiūrį paveldėti iš „Error.prototype“:

 function IllegalArgumentException(sMessage) { this.name = "IllegalArgumentException"; this.message = sMessage; this.stack = (new Error()).stack; } IllegalArgumentException.prototype = Object.create(Error.prototype); IllegalArgumentException.prototype.constructor = IllegalArgumentException; 
23
06 июня '14 в 12:06 2014-06-06 12:06 atsakymas duotas į Rene 06 birželio 14 d. 12:06 2014-06-06 12:06

Aš esu antrojo rėmėjas, nes jis dažniau naudojamas kodų grynumo požiūriu. Tiksliau sakant, jei ketinu išmesti tą pačią išimtį (net ir tos pačios rūšies išimtis su kitokiu pranešimu) keliose vietose, mano kodas taps atsitiktiniu (didžiulis) su pirmuoju požiūriu.

4
26 окт. atsakymą pateikė bellpeace 26 oct. 2012-10-26 00:46 '12 12:46 2012-10-26 00:46

Kiti klausimai apie „ etiketes, arba „ Užduoti klausimą“