Was ist der Unterschied zwischen "__proto__" und "prototype"?


Antwort 1:

nicht

  • __proto__ ist der eigentliche Prototyp, aber benutze ihn nicht..constructor.prototype sollte das Gleiche tun wie __proto__, ist jedoch größtenteils defekt.Prototyp einer Funktion ist eigentlich der Prototyp von Dingen, die von ihr erstellt wurden, nicht ihr Prototyp.

Prototyp

.__ proto__

__proto__

__proto__

ist eigentlich

Neu

.Prototyp

Funktionsprototyp

__proto__

.konstruktor.prototyp

.Konstrukteur

Object.isPrototypeOf

Object.getPrototypeOf


Antwort 2:

Objektprogrammierung in JavaScript wird als "prototypbasiert" bezeichnet

Um eine geerbte API zu definieren, erstellen Sie ein Prototypobjekt mit Methoden und möglicherweise einigen Standardwerten für Eigenschaften.

Alle `Function`-Instanzen (Funktionen sind Objekte in JavaScript) haben standardmäßig eine leere` Prototype`-Eigenschaft, die erweitert oder ersetzt werden kann. Wenn diese Funktion als Konstruktor mit dem "new" -Operator aufgerufen wird, wird diese "prototype" -Eigenschaft zur internen "[Prototype]" -Eigenschaft der Instanzen, von der aus ihre geerbten APIs durchsucht werden

Dieser Prototyp kann auch als einfaches neues Objekt definiert und manuell injiziert werden:

  • Überschreiben Sie für ein vorhandenes Objekt über Object.setPrototypeOf (), das ohne Konstruktorfunktion über Object.create () verwendet wird, die Standardfunktionseigenschaft prototype über literal affectation, Object.assign () oder Object.defineProperty ().

Der interne [Prototyp] eines Objekts war lange Zeit nicht offiziell zur Überprüfung oder Änderung zugänglich. Eine Möglichkeit bestand darin, die geerbte Konstruktoreigenschaft des Objekts zu überprüfen, die jedoch leicht überschrieben werden konnte.

Mozilla stellte dann den inoffiziellen __proto__-Helfer vor.

Anschließend definierte TC39 (die ECMAScript-Arbeitsgruppe) die offizielle API setPrototypeOf () / getPrototypeOf ().

Dann hat TC39 die __proto__ API validiert