Per farla breve: le funzioni destinate a new
hanno prototype
, le istanze di oggetto no.
Probabilmente non riuscirò con precisione a dire questo, ma lo prototype
è qualcosa che si applica solo a ciò che potreste chiamare funzioni di costruzione, che sono chiamate chiamate con new
per creare istanze. Il prototipo può essere pensato come modello per l'istanza risultante.
Per l'oggetto risultante, prototype
è non una proprietà. Piuttosto, le proprietà in il prototipo del costruttore sono disponibili come proprietà sull'istanza che è stata creata. Significa che quando si cerca una proprietà sull'istanza, se non è definita sull'istanza, Javascript inizierà a controllare la catena del prototipo per vedere se è definita lì.
Se si desidera accedere al prototipo di un'istanza, utilizzare Object.getPrototypeOf
.
La semantica di Javascript può essere fonte di confusione. Consiglio vivamente di utilizzare lo Javascript Allongé libero per leggere come un modo per comprendere a fondo alcuni dei punti migliori di Javascript. Il capitolo 8 si concentra esattamente su questo argomento.
'x.constructor.prototype == Foo.prototype' – dandavis
In realtà' x' e 'Foo' non hanno lo stesso prototipo: il prototipo di' Foo' è 'Function.prototype'. Hai delle buone risposte, alcune ricerche sulla "catena dei prototipi javascript" dovrebbero aiutarti. – traktor53