: Working fiddle
function ErrorChild(name, message) {
// Error.call(this); this is not needed
this.name = name;
this.message = message;
}
ErrorChild.prototype = Object.create(Error.prototype);
ErrorChild.prototype.constructor = ErrorChild;
var myerror = new ErrorChild("test", "Help!");
document.body.innerHTML += myerror.message;
yukarıda beklenen davranış kesilmez. throw myerror
, doğru name
ve message
görüntülendiğinde.
ECMA5 Dil Şartname itibaren sorun
:
15.11.1 Fonksiyonu Olarak Aranan Hata Oluşturucu Hatası bir fonksiyonu olarak yerine yapıcı olarak adlandırılır
, yeni bir Error nesnesi oluşturur ve başlatır. Böylece Hata (...) işlev çağrısı, aynı argümanlarla yeni Hata (...) nesne oluşturma ifadesine eşdeğerdir.
sorun
:
Error.call(this)
,
new Error
eşdeğerdir. Ancak
new Error
örneği,
name
veya
message
'u ayarlamayacaktır.
new Error
,
""
ile
message
'u varsayılan olarak başlatacaktır.
15.11.4.3 Error.prototype.message # Ⓣ Error Error.prototype.message öğesinin başlangıç değeri boş String'tir.
Testi (proof)
iç Eğer senin ErrorChild
Eklemek idi:
var test = Error.call(this, message);
console.dir(test);
console.log(test instanceof Error); // true;
console.log(test.message); // "Help!";
test
ECMA5 spec yansıtır. Uygun bir message
ayarlanmış bir Error
örneği.
Sonuç:
Error.call(arguments);
otomatik new Error(arguments);
kapsamı için tercüme Çünkü kaybolur, böylece özellikler this
nesne üzerinde başlatıldı asla.
Object.create(Error.prototype)
kullanıldığında, message
özelliği varsayılan değeri boş Dize alır.
Sorun [bir fonksiyonu olarak 'Error' çağırarak] olmasıdır (http: //es5.github .io/# x15.11.1) kurucuyu çağırıyor gibi davranıyor ('yeni Error') – C5H8NNaO4
Naah, sorunun açıklanması için cevabınızı güncellediğinizde beklediğimi düşündüm; şimdi ben de cevap verdi: D – C5H8NNaO4
Evet Ben Yanıt ^^ sonra (bu için +1), 10 saniye sonra, oldukça ilginç bir soru * (yine de birkaç kez sordu) * Düzenlediğiniz fark ettim * Bir communinity wiki wold Böyle bir soru (neden bunu cw olarak değil)? Evet, ama problemi oldukça iyi karşıladıklarını düşünüyorum. =) – C5H8NNaO4