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__