2016-04-16 11 views
0

JavaScript Formatierung, wenn throw einen eingebauten Fehler als solches -ing:benutzerdefinierte Fehler Werfen hat Fehler nicht erhält im Protokoll

throw new Error("Something was wrong"); 

zeigt den Text schön - Sie können Sie ein Objekt nicht sagen, warfen enter image description here

wenn jedoch ein Fehler durch benutzerdefinierte Subklassifizieren die Error Objekt (oder eine andere Fehlerobjekt in diesem Fall) zu schaffen, wird der Fehler nicht geworfen die gleiche Art und Weise in der Konsole angezeigt.

Also, indem Sie diesen Code verwenden:

var ImproperlyConfigured = function(message){ 
    this.name ="ImproperlyConfigured"; 
    this.message = message || "The object you tried to construct was improperly configured due to an unknown error"; 
} 
ImproperlyConfigured.prototype = new Error(); 

Im Folgenden ist der Ausgang enter image description here

ich die Tatsache nicht gefällt, dass die Objekteigenschaften (name und message) gezeigt. In der Tat mag ich nicht, dass ich nicht verstehe, warum die Eigenschaften angezeigt werden.

Ich habe ein bisschen gegoogelt und ich habe das Gefühl, dass durch die Implementierung einer toString Methode hilft, aber, mit dieser Methode, die Tatsache, dass der Name des Fehlers nicht mehr in rot ist, rätselt mich noch mehr.

-Code

var ImproperlyConfigured = function(message){ 
    this.name ="ImproperlyConfigured"; 
    this.message = message || "The object you tried to construct was improperly configured due to an unknown error"; 
    this.toString = function(){ 
     return this.message; 
    } 
} 
ImproperlyConfigured.prototype = new Error(); 

Ausgang: enter image description here

Was würde ich ein Standard erreichen möchte, ist suchen Fehler, durch die Verwendung von benutzerdefinierten Fehler und natürlich, indem sie nicht die console.error Methode manuell mit in einem try...catch Block.

Ist das möglich?

+0

Ich habe gerade versucht, Ihren Code in Chrom und [der Ausgang war in Ordnung] (http://i.imgur.com/TPVpkHB.png). In welcher Software/Konsole haben Sie getestet? –

+1

Entwicklerkonsolen folgen keinem bestimmten Standard und sie tun ziemlich genau, was sie wollen. – Pointy

+0

@ DenysSéguret Ich verwende derzeit [Google Chrome] (https://www.google.com/chrome/browser/desktop/) Version 49.0.2623.110 m – Adelin

Antwort

0

Wie Pointe richtig hingewiesen (Wortspiel beabsichtigt), ist das Problem hier nicht mit JavaScript, sondern mit der Umgebung JavaScript läuft (in diesem Fall Google Chrome).

In einer anderen Umgebung (wie Chromium, Firefox, NodeJS, etc.) wird das Verhalten wahrscheinlich anders sein und denselben Code verwenden, abhängig davon, wie diese JavaScript-Hosts diese Fälle behandeln.