2013-05-05 6 views
5

Meine benutzerdefinierte Fehlerklasse:Individuelle Javascript Error.toString()

function MyError(message) { 
    this.message = message || ""; 
} 

MyError.prototype   = new Error(); 
MyError.prototype.name  = "MyError"; 
MyError.prototype.toString = function() { 
    return "[" + this.name + "] " + this.message; 
}; 

Wenn ich throw new MyError("test") dann FF/IE-Konsole zeigt eine Standardmeldung statt des erwarteten [MyError] test laufen.

Wie bekomme ich die JS-Engine meine toString() Methode zu verwenden?

+0

Sollte es nicht "MyError.prototype = Error.prototype" sein? – fardjad

+1

Eine Lösung wäre es, nicht von Error zu erben. –

+1

@fardjad nope [siehe hier] (http://Stackoverflow.com/a/871646/1711500) –

Antwort

0

Ich kann mich irren, aber ich denke, dass die Konsolenausgabe in diesem Fall von der JS-Engine gesteuert wird, und so können Sie es nicht formatieren, wie ich oben getan habe.

+0

Ja, das stimmt wahrscheinlich. Aber warum würdest du das sowieso ändern wollen? – Bergi

+0

Ein anderes Tool, das die Ausgabe analysiert. Ich muss es ändern. –

+0

Können Sie uns dieses Werkzeug zeigen? Ich bin sicher, dass es eine bessere Lösung gibt. – Bergi

3

Dies ist, wie ich Error (getestet und arbeitet an FF v20) erben würde:

function MyError(message) { 
    this.message = message || ""; 
} 

MyError.prototype = Object.create(Error.prototype); // see the note 
MyError.prototype.name = "MyError"; 
MyError.prototype.toString = function() { 
    return "[" + this.name + "] " + this.message; 
} 

console.log(new MyError("hello").toString()); // "[MyError] hello" 

Beachten Sie, dass alte Browser nicht Object.create unterstützen kann (ES5 Syntax), können Sie this Shim verwenden, um Bring es zum Laufen.

+0

Leider zeigt dies nicht das erwartete Verhalten, wenn Sie dies tun: 'werfen neue MyError (" Hallo ");' Es zeigt immer noch eine Standardmeldung. Der oben aufgeführte Weg ist funktional äquivalent, aber etwas sicherer. Ich habe das Gefühl, dass dies mit der JS-Engine des Browsers zu tun hat, und ich kann sie daher nicht ändern. –

+0

Eigentlich 'neue MyError ('Hallo') '' '' '' '' '' '' '** ** für ** FF * **. – fardjad

+0

Es funktioniert, aber es zeigt nicht Ihre benutzerdefinierte Zeichenfolge. –