Aktualisieren Sie Ihren Code, um Ihren Prototyp dem Error.prototype zuzuweisen, und die Instanz von und Ihre Asserts funktionieren.
function NotImplementedError(message) {
this.name = "NotImplementedError";
this.message = (message || "");
}
NotImplementedError.prototype = Error.prototype;
Ich würde jedoch einfach Ihr eigenes Objekt werfen und nur die Namenseigenschaft überprüfen.
throw {name : "NotImplementedError", message : "too lazy to implement"};
Bearbeiten Sie basierend auf Kommentaren
Nachdem ich mir die Kommentare angesehen und versucht hatte, mich daran zu erinnern, warum ich den Prototyp Error.prototype
anstelle von new Error()
Nicholas Zakas in seinem Artikel zugewiesen hatte , erstellte ich eine jsFiddle mit dem folgenden Code:
function NotImplementedError(message) {
this.name = "NotImplementedError";
this.message = (message || "");
}
NotImplementedError.prototype = Error.prototype;
function NotImplementedError2(message) {
this.message = (message || "");
}
NotImplementedError2.prototype = new Error();
try {
var e = new NotImplementedError("NotImplementedError message");
throw e;
} catch (ex1) {
console.log(ex1.stack);
console.log("ex1 instanceof NotImplementedError = " + (ex1 instanceof NotImplementedError));
console.log("ex1 instanceof Error = " + (ex1 instanceof Error));
console.log("ex1.name = " + ex1.name);
console.log("ex1.message = " + ex1.message);
}
try {
var e = new NotImplementedError2("NotImplementedError2 message");
throw e;
} catch (ex1) {
console.log(ex1.stack);
console.log("ex1 instanceof NotImplementedError2 = " + (ex1 instanceof NotImplementedError2));
console.log("ex1 instanceof Error = " + (ex1 instanceof Error));
console.log("ex1.name = " + ex1.name);
console.log("ex1.message = " + ex1.message);
}
Die Konsolenausgabe war dies.
undefined
ex1 instanceof NotImplementedError = true
ex1 instanceof Error = true
ex1.name = NotImplementedError
ex1.message = NotImplementedError message
Error
at window.onload (http://fiddle.jshell.net/MwMEJ/show/:29:34)
ex1 instanceof NotImplementedError2 = true
ex1 instanceof Error = true
ex1.name = Error
ex1.message = NotImplementedError2 message
Dies bestätigt, dass das "Problem", auf das ich gestoßen bin, darin bestand, dass die Stapeleigenschaft des Fehlers die Zeilennummer new Error()
war, in der sie erstellt wurde, und nicht, wo das throw e
aufgetreten ist. Dies kann jedoch besser sein, als den Nebeneffekt einer NotImplementedError.prototype.name = "NotImplementedError"
Linie zu haben, die das Fehlerobjekt beeinflusst.
Beachten Sie auch, dass NotImplementedError2
, wenn ich das nicht .name
explizit einstelle , es gleich "Fehler" ist. Wie in den Kommentaren erwähnt, new Error()
könnte ich jedoch festlegen NotImplementedError2.prototype.name = "NotImplementedError2"
und in Ordnung sein , da diese Version den Prototyp festlegt .