2012-06-03 9 views
9

¿Los siguientes avisos alertarán "Foo" en todos los navegadores, incluso cuando se minimicen?Obteniendo el nombre de una clase de coffeescript?

class Foo 

alert(Foo.name) 

Nada se dice en el documento, sé que IE tiene problemas con los nombres de función, y estoy confundido con las muchas cuestiones abiertas sobre esto, como anyoftheseissues!

+0

código miniaturizado WRT - realmente depende del minificador y la configuración que le pasa. La mayoría se puede configurar para no tocar declaraciones de función nombradas (como UglifyJS '--no-mangle-functions'), por lo que la propiedad' name' debería funcionar bien allí (a menos que el navegador no lo soporte en absoluto). Por supuesto, con la propiedad que CoffeeScript define manualmente desde 1.3.3, siempre debería funcionar independientemente de la minificación (como se agrega como una propiedad literal de cadena simple) – shesek

Respuesta

8

Eso puede depender en qué versión del compilador de CoffeeScript está utilizando. En la última versión estable (1.3.3), una propiedad de "nombre" no se genera por defecto.

class Foo 

compila en

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

Ya que la propiedad name no es estándar y actualmente no soportado por el IE, realmente no se puede confiar en ella a través del navegador. La información detallada sobre este están disponibles en el MDN: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/Name

+0

¿Está insinuando que una versión posterior o anterior generaría una propiedad de nombre? Además, existe alguna bandera que anulará este valor predeterminado o tendrá que agregar la propiedad usted mismo. –

+0

Creo que en realidad se ha eliminado, por lo que en versiones anteriores es posible que aún encuentre este comportamiento, sí. – Niko

9

Desde dentro de cualquier método de la clase Foo que se incluye en Foo.prototype, puede insertar la línea

console.log @constructor.name 

y se escribirá

Foo 

en el registro de la consola. HTH.

+3

Ahora está claro (ver el final de https://github.com/jashkenas/coffee-script/issues/2052) que no es compatible. ¡Ve y pídelo si tú también lo quieres! –

Cuestiones relacionadas