Perbarui kode Anda untuk menetapkan prototipe Anda ke Error.prototype dan instanceof dan karya Anda menegaskan.
function NotImplementedError(message) {
this.name = "NotImplementedError";
this.message = (message || "");
}
NotImplementedError.prototype = Error.prototype;
Namun, saya hanya akan membuang objek Anda sendiri dan hanya memeriksa properti namanya.
throw {name : "NotImplementedError", message : "too lazy to implement"};
Edit berdasarkan komentar
Setelah melihat komentar dan mencoba mengingat mengapa saya akan menetapkan prototipe, Error.prototypebukan new Error()seperti yang dilakukan Nicholas Zakas dalam artikelnya , saya membuat jsFiddle dengan kode di bawah ini:
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);
}
Output konsol adalah ini.
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
Ini mengkonfirmasi "masalah" yang saya temui adalah properti stack kesalahan adalah nomor baris tempat new Error()dibuat, dan bukan di mana throw eterjadi. Namun, itu mungkin lebih baik yang memiliki efek samping dari NotImplementedError.prototype.name = "NotImplementedError"garis yang mempengaruhi objek Kesalahan.
Juga, perhatikan NotImplementedError2, ketika saya tidak mengatur .namesecara eksplisit, itu sama dengan "Kesalahan". Namun, seperti yang disebutkan dalam komentar, karena versi itu menetapkan prototipe new Error(), saya dapat mengatur NotImplementedError2.prototype.name = "NotImplementedError2"dan menjadi OK.