Sto cercando di conciliare questa affermazione con la consapevolezza che il prototipo è una proprietà con riferimento al tipo genitore, dal momento che è come si ottiene l'ereditarietà.
No. Il rapporto prototipo ad un altro oggetto (da cui vengono ereditate proprietà) avviene tramite un collegamento invisibile, talvolta indicato come [[prototype]]
.
La proprietà attuale esistente .prototype
su una funzione di costruzione è l'oggetto da cui erediteranno tutte le istanze che sono state costruite da tale funzione.
Quindi il prototipo (eredità) la catena di un oggetto Array assomiglia a questo:
null
^
|
Object.prototype ---> {hasOwnProperty(), …} // all objects inherit these
^
|
Array.prototype ----> {map(), indexOf(), …} // all arrays inherit these
^
|
{length, 0, 1, 2, …} // an example array
// as if constructed by new Array(5) or [42, 7, 6]
Perché alcuni metodi hanno .prototype e alcuni non lo fanno?
Le funzioni che sono disponibili sul .prototype
verrà ereditata da tutte le istanze, si possono chiamare direttamente su di loro se fossero un metodo di loro.
Le funzioni che si trovano direttamente sulla funzione di costruzione, come Array.isArray
o Array.of
, non sono correlate all'istanza e "statiche", per così dire. Li chiami principalmente con i non-array come argomenti.
Tutte le funzioni hanno una proprietà '.prototype'. – Bergi
@Bergi sei sicuro di questo;)? (suggerimento '.bind' e funzioni definite dall'ambiente host) –
@BenjaminGruenbaum: Oops, hai ragione. Solo le funzioni di costruzione * native * e tutti gli oggetti funzione creati dall'utente hanno una proprietà '.prototype'. Grazie per il testa a testa! – Bergi