SORU
23 NİSAN 2009, PERŞEMBE


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
16 Mayıs 2009, CUMARTESİ


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Matthew Smith

    Matthew Smit

    24 Mayıs 2010
  • RocketJump

    RocketJump

    22 ŞUBAT 2006
  • Ty Moss

    Ty Moss

    20 Kasım 2007