Quelle est la différence entre "__proto__" et "prototype"?


Réponse 1:

ne pas

  • __proto__ est le prototype réel, mais ne l'utilisez pas..constructor.prototype était censé faire la même chose que __proto__ mais c'est surtout cassé.Le .prototype d'une fonction est en fait le prototype de choses faites par lui, pas son prototype.

prototype

.__proto__

__proto__

__proto__

est en fait

Nouveau

.prototype

Function.prototype

__proto__

.constructor.prototype

.constructeur

Object.isPrototypeOf

Object.getPrototypeOf


Réponse 2:

La programmation d'objets en JavaScript est dite «basée sur des prototypes»

Pour définir une API héritée, vous créez un objet prototype avec des méthodes et potentiellement certaines valeurs par défaut des propriétés.

Toutes les instances de `Function` (les fonctions sont des objets en JavaScript) ont une propriété` prototype` vide par défaut qui peut être étendue ou remplacée. Si cette fonction est appelée en tant que constructeur avec l'opérateur `new`, cette propriété` prototype` deviendra la propriété interne `[Prototype]` des instances, d'où seront recherchées leurs API héritées

Ce prototype peut également être défini comme un nouvel objet simple et injecté manuellement:

  • sur un objet existant via Object.setPrototypeOf (), utilisé sans fonction constructeur via Object.create (), remplacez la propriété de prototype de fonction par défaut via l'affectation littérale, Object.assign () ou Object.defineProperty ()

Pendant longtemps, le [Prototype] interne d'un objet n'était pas officiellement accessible pour inspection ou modification. Une façon de le faire était d'inspecter la propriété héritée «constructeur» de l'objet, mais elle aurait pu facilement être remplacée.

Mozilla a ensuite présenté l'assistant non officiel __proto__.

TC39 (le groupe de travail ECMAScript) a ensuite défini l'API officielle setPrototypeOf () / getPrototypeOf ().

Puis à nouveau TC39, validé l'API __proto__