Quina diferència hi ha entre "__proto__" i "prototip"?
Resposta 1:
no
- __proto__ és el prototip real, però no l'utilitzeu..constructor.prototype se suposa que hauria de fer el mateix que __proto__, però està sobretot trencat.
prototip
.__ proto__
__proto__
__proto__
en realitat és
nou
.prototip
Funció.prototip
__proto__
.constructor.prototip
.constructor
Object.isPrototypeOf
Object.getPrototypeOf
Resposta 2:
Es diu que la programació d'objectes en JavaScript és "basada en prototips"
Per definir una API heretada, creeu un objecte prototip amb mètodes i possiblement alguns valors predeterminats de propietats.
Totes les instàncies `Function '(les funcions són objectes de JavaScript) tenen una propietat predeterminada de" prototip "buida que es pot ampliar o substituir. Si s'anomena aquesta funció com a constructor amb el `nou`operador, aquesta propietat` prototip` es convertirà en la propietat interna [[Prototip] `de les instàncies, des d’on es buscaran les seves API API heretades.
Aquest prototip també es pot definir com un objecte simple i s'injecta manualment:
- en un objecte existent a través de Object.setPrototypeOf (), utilitzat sense la funció de constructor a través de Object.create (), substituir la propietat del prototip de funció predeterminada mitjançant afectació literal, Object.assign () o Object.defineProperty ()
Durant molt de temps el [Prototip] intern d’un objecte no era oficialment accessible per a la seva inspecció ni modificació. Una manera de fer-ho era inspeccionar la propietat del “constructor” heretada de l’objecte, però fàcilment s’hauria pogut sobrerestar per ella mateixa.
Mozilla va presentar llavors l'ajudant no oficial __proto__.
A continuació, TC39 (el grup de treball ECMAScript) va definir l'API oficial setPrototypeOf () / getPrototypeOf ().
A continuació, de nou TC39, va validar l'API __proto__