Nasıl JavaScript özel bir Hata oluşturabilirim?
Nedense kurucu heyet aşağıdaki kod çalışmıyor gibi görünüyor:
function NotImplementedError() {
Error.apply(this, arguments);
}
NotImplementedError.prototype = new Error();
var nie = new NotImplementedError("some message");
console.log("The message is: '" nie.message "'")
Bu koşu verir The message is: ''
. Neden, ya da eğer Error
yeni bir alt sınıf oluşturmak için daha iyi bir yol varsa öğrenecem. Yerli apply
ıng ile ilgili bir sorun Error
bilmem oluşturucu var mı?
CEVAP
Kodunuzu Hata için prototip atamak için güncelleme.prototip ve örneğin ve iş belirtmektedir.
function NotImplementedError(message) {
this.name = "NotImplementedError";
this.message = (message || "");
}
NotImplementedError.prototype = Error.prototype;
Ancak, sadece kendi nesne atmak ve sadece name özelliği kontrol ederim.
throw {name : "NotImplementedError", message : "too lazy to implement"};
Edit yoruma dayalı
Baktıktan sonra yorum ve hatırlamaya çalışıyorum neden olur prototip atamak için Error.prototype
yerine new Error()
gibi Nicholas Zakas mi yazısında, benim yarattığım bir jsFiddle ile kod aşağıda:
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);
}
Konsol çıktı bu.
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
Bu "sorunu ile karşılaştım" throw e
oluştuğu hatanın özelliği new Error()
oluşturulduğu satır numarası ve bir yığın oldu. confirmes Ancak, bu NotImplementedError.prototype.name = "NotImplementedError"
Bir satır Hata nesneyi etkileyen yan etkisi daha iyi olabilir.
Ayrıca, .name
açıkça ayarlanmış bilmiyorum ne zaman NotImplementedError2
ile fark eşittir "". Hata Bu sürüm new Error()
, prototip ayarlar çünkü açıklamalarda da belirtildiği gibi, ancak NotImplementedError2.prototype.name = "NotImplementedError2"
ayarlayın ve TAMAM olabilirim.
Nasıl JavaScript iki boyutlu bir dizi ...
Nasıl hata ayıklama Firebug (veya benz...
Nasıl Google hata ayıklama iletileri y...
Nasıl "düzgün" JavaScript öz...
Nasıl hata iletisi konsol baskı yapmam...