En Javascript, las funciones son objetos. Sin embargo, typeof de una función devuelve una function en lugar de un object por razones de compatibilidad con ECMAScript .
¿Es este tipo de function en realidad algún tipo de contenedor para el object que se puede determinar de alguna manera? O en Javascript, ¿una function es realmente fundamentalmente diferente de los object ?
Entiendo que las funciones son efectiva y prácticamente objetos. Pero, ¿están, por definición , completamente separados de los Objetos en Javascript, o hay una manera de revelar mediante programación el Objeto del que está hecha la Función?
Como dice la especificación:
un objeto es miembro del tipo incorporado Objeto; y una función es un objeto invocable
Asi que
O en Javascript, ¿una función es realmente fundamentalmente diferente de los objetos?
En realidad, no, excepto por el hecho de que se puede llamar a una función, más precisamente, que tiene un método interno [[Call]] .
Las funciones heredan de los objetos de una manera muy similar a como los objetos heredan de los objetos. Por ejemplo, para una función dada:
function foo(){} foo.a = 'a';Hay:
[[Call]] , así como a propiedad y algunas otras propiedades que tienen las funciones (como name )Function.prototypeFunction.prototype hereda de Object.prototypeObject.prototype hereda de la nada: ese es el comienzo de la cadena de prototipos¿Hay alguna manera de revelar programáticamente el objeto del que está hecha la función?
Realmente no es así: la función en sí es un objeto. Si el objeto de la función tiene propiedades, será visible directamente en la función. Por ejemplo, arriba, hacer referencia a foo.a le dará la cadena 'a' . La propiedad a no está separada de la función, está directamente en el objeto de la función.