2012-06-11 17 views

cevap

16

:

  • throw error
  • throw new Error(error) yeni Hata nesnesi haline sarar aynı hata nesnesini atar. Daha sonra, örneğin, Java'da checked Exception'u işaretlenmemiş birine dönüştürmeniz gerektiğinde kullanılır. JavaScript'te istisnai durumları sarmanıza gerek yoktur, çünkü bu durum stacktrace'i biraz daha uzun ve daha az güzel yapar.

Edit: Bazı güvenlik etkileri de var.

function noWrap() { 
    try { 
     var o = {}; o.nonexistingMethod(); 
    } catch (error) { 
     throw error; 
    } 
} 

function wrap() { 
    try { 
     var o = {}; o.nonexistingMethod(); 
    } catch (error) { 
     throw new Error(error); 
    } 
} 

noWrap() çağrılması aşağıdaki hata iletisi üretir: Bir kullanarak görebileceğiniz gibi, Yani

"Error: TypeError: Object #<Object> has no method 'nonexistingMethod'" 
// with error.arguments === undefined 

:

"TypeError: Object #<Object> has no method 'nonexistingMethod'" 
// with error.arguments === ['nonexistingMethod', o] 

wrap() çağrılması aşağıdaki hata iletisi üretir İşte bir örnek Error nesnesi, orijinal hatanın arguments içeriğini gizleyebiliriz. Aşağıdakilerden birini yazıyoruz düşünelim:

  • bir kütüphane
  • Eğer (sahibi olmadığınız bir sayfada yüklenecek bir komut dosyası çeşit örneğin benzerleri veya tweet düğmesi çeşit)
  • sen yerleştirilmeli güvenli kalmak için bazı üçüncü taraf yüklü komut dosyalarını (sosyal düğmeleri, reklamları, izleme kodu, vs.) için yukarıda sıralanan tüm bu durumlarda

bulunan bir sayfaya bir komut dosyasıErrornesnesi. Aksi halde, dahili nesneleriniz, fonksiyonlarınız ve değişkenlerinize ait referansları yanlışlıkla sızdırabilirsiniz.

Düzenleme 2: Yığınlarla ilgili. Her iki varyant onları korur. aksi takdirde sadece hata mesajı alıyorum,

// No wrapping: 
TypeError: Object #<Object> has no method 'nonexistingMethod' 
    at noWrap (http://fiddle.jshell.net/listochkin/tJzCF/show/:22:23) 
    at http://fiddle.jshell.net/listochkin/tJzCF/show/:37:5 
    at http://fiddle.jshell.net/js/lib/mootools-core-1.4.5-nocompat.js:3901:62 
    at http://fiddle.jshell.net/js/lib/mootools-core-1.4.5-nocompat.js:3915:20 

// Wrapping: 
Error: TypeError: Object #<Object> has no method 'nonexistingMethod' 
    at wrap (http://fiddle.jshell.net/listochkin/tJzCF/show/:32:15) 
    at http://fiddle.jshell.net/listochkin/tJzCF/show/:44:5 
    at http://fiddle.jshell.net/js/lib/mootools-core-1.4.5-nocompat.js:3901:62 
    at http://fiddle.jshell.net/js/lib/mootools-core-1.4.5-nocompat.js:3915:20 
+0

Birisi sarılmış versiyonu size tam stacktrace bir hata nesnesi verir bana tavsiye: Burada a working example ve ben Chrome'da şu stacktraces olsun. –

+0

Hata nesnesini başka bir yere iletmek isterseniz, konsol.error() işlevini kullandığınız için stacktrace'i aldığınızı iddia ediyor. Korunduğuna inanıyorum, ama bunu araştırmak ilginç olacak. –

+1

Tarayıcıya bağımlı. Örneğin, IE9'da Hata nesnelerinde 'stack' özelliği yoktur. Diğer tarayıcıları bilmiyorum. –