2012-06-03 15 views
9

Tüm tarayıcılarda, küçültülmüş olsa bile, aşağıdaki uyarı "Foo" mesajını verecek mi?Bir kahve sınıfının ismini mi aldınız?

class Foo 

alert(Foo.name) 

Hiçbir şey doc belirtilmiştir, IE fonksiyon isimlerinin ile ilgili sorunlar olduğunu biliyorum ve birçok konu bağlı olabilir oftheseissues!

+0

WRT küçültülmüş kodu - gerçekten de ona gönderilen minifier ve yapılandırmaya bağlıdır. Çoğu, adlandırılmış işlev ifadelerine (UglifyJS'nin --no-mangle işlevleri gibi) dokunmayacak şekilde yapılandırılabilir; bu nedenle, 'name' özelliği orada iyi çalışmalıdır (tarayıcı bunu desteklemiyorsa). Tabii ki, CoffeeScript özelliği 1.3.3'den beri manuel olarak tanımlar, her zaman minimuma bakmaksızın çalışmalıdır (düz bir dize hazır özelliği olarak eklendiğinden) – shesek

cevap

8

any gibi bu konuda açılmış olan karıştı Kullandığınız CoffeeScript derleyicinin hangi sürümünde. En son kararlı sürümde (1.3.3), bir "isim" özelliği varsayılan olarak üretilmez.

class Foo 

name mülkiyet IE tarafından standart dışı ve şu anda desteklenmiyor olması nedeniyle

var Foo; 
Foo = (function() { 
    function Foo() {} 
    return Foo; 
})(); 

içine derler, gerçekten üzerinde çapraz tarayıcı güvenemeyiz. Foo.prototype dahildir sınıfın Foo herhangi yöntemle içinden https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/Name

+0

Daha sonraki veya daha eski bir sürümün bir isim özelliği oluşturacağını ima ediyor musunuz? Ayrıca, bu varsayılanı geçersiz kılacak veya mülkünü kendiniz eklemeniz gereken bir bayrak var. –

+0

Gerçekten de kaldırıldığını düşünüyorum, bu yüzden eski sürümlerde hala bu davranışı bulabilirsiniz, evet. – Niko

9

, sınırı

console.log @constructor.name 

ekleyebilir ve

Foo 
yazacak: Bu konuda detaylı bilgiye MDN'yi mevcuttur Konsol günlüğünüze

. HTH.

+3

Artık desteklenmediği anlaşılıyor (https://github.com/jashkenas/coffee-script/issues/2052'nin sonuna bakın). Git ve istersen de sor! –