2011-02-01 14 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 

Perché typeof Function.prototype restituisce "funzione", non "oggetto" come altri oggetti prototipo?In JavaScript, perché typeof Function.prototype è "function", non "object" come altri oggetti prototype?

Grazie!

+4

Si potrebbe avere fatto la domanda senza tutto il codice HTML. Una bella domanda però ... –

+0

@AtesGoral Risolto ora! – Taurus

+0

@Taurus Meglio tardi (6 anni) che dispiaciuto! –

risposta

17

questo sembra essere definite ECMAScript 5:

15.3.4 proprietà della funzione prototipo oggetto

L'oggetto prototipo di funzione è di per sé un oggetto Function (la sua [[Class]] è "Funzione") che, una volta invocato, accetta qualsiasi argomento e restituisce indefinito.

+0

Grazie per la risposta! =) – weilou

+0

ok ma perché? qual è la ragione dietro? Non potrebbe essere solo un oggetto? –

+0

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

0

Dal momento che ha tutti i metodi e oggetti di scena che ogni funzione è AVREBBE DOVUTO, questo lo rende efficace una funzione ...

Pensateci per un momento e lasciare affondare e si' a questo punto :)

0

Poiché la funzione è un oggetto nativo che tra le altre proprietà ha proprietà interne [[Costruisci]] e [[Call]] e anche proprietà prototipo esplicite - il riferimento a un prototipo del futuro oggetti. E la sua classe è la funzione.

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

Così [[Bando]] oltre al [[Classe]] proprietà (che equivale a "Funzione") è il principale nei confronti di oggetti distintivi. Pertanto gli oggetti con proprietà interne [[Call]] sono chiamati come funzioni. L'operatore typeof per tali oggetti restituisce il valore "function".

see for reference

4

sua menzionati nel ECMAScript2015

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

Th oggetto prototipo di funzione è specificato di essere un oggetto funzione per garantire la compatibilità con il codice ECMAScript che è stato creato prima del ECMAScript 2015 specifica.

Questo oggetto funzione in realtà non fa nulla che un oggetto funzione è destinato a fare. Puoi chiamarlo con qualsiasi argomento & restituisce undefined. È un cretino. oggetto di funzione. È un normale oggetto prototipo.

E poiché è solo lì per motivi di compatibilità, non ha nemmeno una proprietà prototipo.

Per ulteriori elaborazioni, è possibile fare riferimento questa risposta: enter link description here

Problemi correlati