2009-05-22 25 views

Respuesta

10

En general, un objeto puede llamarse sin ser una función. En un lenguaje donde todo es un objeto (incluidas las funciones), los objetos invocables no tienen que descender de una clase de Función.

En JS, parece que un Callable es cualquier cosa que tenga el método interno [[Call]] (identificado por un tipo de 'función', en oposición a 'objeto'). Una función (como se usa en la diapositiva) es un descendiente del objeto Function. Podría estar equivocado, pero dentro de un script solo puede crear Funciones mientras que la implementación de ECMAScript puede definir Callables que no son Funciones.

Si prueba el fragmento de código de la diapositiva con funciones anónimas/expresiones de función y con funciones declaradas, los resultados son los mismos.

typeof function() {}; // == 'function' 
({}).toString.call(function() {}) // == '[object Function]' 
function foo() {} 
typeof foo; // == 'function' 
({}).toString.call(foo) // == '[object Function]' 
+3

e iluminar Outis la respuesta, aquí hay una discusión sobre cómo llegó a ser: http://bugs.ecmascript.org/ticket/153 –

+0

Más información: (function() {}) .constructor; \t // → Prototipo de función ({}). Constructor; \t \t // → Objeto prototipo – ken

+2

@FranCorpier Ese enlace es malo. ¿Puedes actualizarlo? Parece que podría ser una discusión interesante. – Icode4food

Cuestiones relacionadas