Die Unterschiede zwischen proto und constructionor.prototype
Die proto-Eigenschaft eines Objekts verweist auf sein Prototypobjekt, das gemeinsame Eigenschaften und Methoden enthält. Im Gegensatz dazu verweist „constructor.prototype“ auf die Prototypeigenschaft der Konstruktorfunktion des Objekts.
Das folgende Beispiel veranschaulicht die Unterscheidung:
function Gadget(name, color) {
this.name = name;
this.color = color;
}
Gadget.prototype.rating = 3;
var newtoy = new Gadget("webcam", "black");
In diesem Fall zeigt newtoy.__proto__ auf Gadget.prototype, das die Eigenschaftsbewertung hat, während newtoy.constructor.prototype auch auf Gadget verweist .Prototyp. Allerdings gibt newtoy.constructor.prototype.constructor.prototype.constructor.prototype null zurück, da es über Object.prototype hinaus keinen weiteren Prototyp gibt.
Dies liegt daran, dass proto ein direkter Verweis auf ist Prototyp-Objekt, während constructionor.prototype der Prototypenkette folgt. Wenn Sie mehrmals auf „constructor.prototype“ zugreifen, durchlaufen Sie die Prototypenkette, bis Sie Object.prototype der obersten Ebene erreichen.
In Internet Explorer gibt es keine __proto__-Eigenschaft. Stattdessen können Sie das Attribut [[Prototype]] verwenden, um auf den Prototyp eines Objekts zuzugreifen. Auf dieses Attribut kann jedoch im Standard-JavaScript-Code nicht zugegriffen werden.
Die Referenzierung der Prototypobjekte kann Ihnen helfen, die Vererbungshierarchie in JavaScript zu verstehen, und bietet einen Mechanismus zum Teilen von Eigenschaften und Methoden zwischen verwandten Objekten.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3