2011-02-01 17 views
19
console.log(typeof String.prototype); // object 
console.log(typeof Number.prototype); // object 
console.log(typeof Object.prototype); // object 
console.log(typeof Boolean.prototype); // object 

console.log(typeof Function.prototype); // function 

¿Por qué typeof Function.prototype devuelve "función", no "objeto" como otros objetos prototipo?En JavaScript, ¿por qué typeof Function.prototype es "función", no "objeto" como otros objetos prototipo?

¡Gracias!

+4

Se podría haber hecho la pregunta sin todo el HTML. Una buena pregunta, sin embargo ... –

+0

@AtesGoral ¡Solucionado ahora! – Taurus

+0

@Taurus Mejor tarde (6 años) que lo siento! –

Respuesta

17

Ésta parece ser definido en ECMAScript 5:

15.3.4 Propiedades del objeto prototipo de la función

El objeto prototipo de función es en sí mismo un objeto Function (su [[Class]] es "Función") que, cuando se invoca, acepta cualquier argumento y devuelve undefined.

+0

¡Gracias por tu respuesta! =) – weilou

+0

bien, pero ¿por qué? ¿Cuál es la razón detrás de esto? ¿No podría ser solo un objeto? –

+0

@BarbuBarbu: mira aquí: http://www.ecma-international.org/ecma-262/6.0/#sec-properties-of-the-function-prototype-object – anand

0

Ya que tiene todos los métodos y apoyos que cualquier función es debe tener, esto hace que sea efectivamente una función ...

Piense en esto por un momento y dejar que se hunda y que' ll obtener la imagen para entonces :)

0

Porque la función es un objeto nativo que entre otras propiedades tiene propiedades internas [[Construir]] y [[Llamar]] y también propiedad prototipo explícita - la referencia a un prototipo del futuro objetos. Y su clase es función.

F.[[Class]] = "Function" 
F.[[Call]] = <reference to function> // function itself 

Así [[Call]], además de la propiedad [] [Clase] (que es igual a "Función") es la principal en relación con los objetos que distinguen. Por lo tanto, los objetos que tienen una propiedad interna [[Call]] se llaman como funciones. El operador typeof para tales objetos devuelve el valor de "función".

see for reference

4

Su mencionados en el ECMAScript2015

http://www.ecma-international.org/ecma-262/6.0/#sec-properties-of-the-function-prototype-object:

Th objeto prototipo de función se especifica a ser un objeto de función para asegurar la compatibilidad con el código de ECMAScript que se creó antes de la ECMAScript 2015 especificación.

Este objeto de función no hace realmente nada de lo que un objeto de función debe hacer. Puede llamarlo con cualquier argumento & devuelve indefinido. Es un tonto. objeto de función. Es un objeto prototipo normal.

Y como solo está allí por razones de compatibilidad, ni siquiera tiene una propiedad prototipo.

Para una mayor elaboración, se puede hacer referencia esta respuesta: enter link description here

Cuestiones relacionadas