Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. JavaScript-Referenz
  4. Eingebaute Standardobjekte
  5. Objekt
  6. __proto__

Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.

View in EnglishAlways switch to English

Object.prototype.__proto__

Veraltet: Diese Funktion wird nicht mehr empfohlen. Obwohl einige Browser sie möglicherweise noch unterstützen, könnte sie bereits aus den relevanten Webstandards entfernt worden sein, in Kürze entfernt werden oder nur noch aus Kompatibilitätsgründen bestehen. Vermeiden Sie die Verwendung und aktualisieren Sie vorhandenen Code, falls möglich; siehe dieKompatibilitätstabelle am Ende dieser Seite, um Ihre Entscheidung zu unterstützen. Beachten Sie, dass diese Funktion jederzeit aufhören könnte zu funktionieren.

Warnung:Das Ändern des[[Prototype]] eines Objekts ist aufgrund der Art und Weise, wie moderne JavaScript-Engines den Zugriff auf Eigenschaften optimieren, derzeit in jedem Browser und jeder JavaScript-Engine eine sehr langsame Operation. Darüber hinaus sind die Auswirkungen der Veränderung der Vererbung subtil und weitreichend und beschränken sich nicht auf die Zeit, die mit der Anweisungobj.__proto__ = ... verbracht wird, sondern können sich aufjeden Code auswirken, der Zugriff auf ein Objekt hat, dessen[[Prototype]] verändert wurde. Sie können mehr darüber inJavaScript-Engine-Grundlagen: Optimierung von Prototypen lesen.

Hinweis:Die Verwendung von__proto__ ist umstritten und wird nicht empfohlen. Seine Existenz und sein genaues Verhalten wurden nur als Legacy-Feature standardisiert, um die Web-Kompatibilität zu gewährleisten, während es mehrereSicherheitsprobleme und Fallstricke präsentiert. Um eine bessere Unterstützung zu gewährleisten, sollten Sie stattdessenObject.getPrototypeOf()/Reflect.getPrototypeOf() undObject.setPrototypeOf()/Reflect.setPrototypeOf() bevorzugen.

Die__proto__ Accessor-Eigenschaft vonObject-Instanzen gibt das[[Prototype]] (entweder ein Objekt odernull) dieses Objekts frei.

Die__proto__-Eigenschaft kann auch in einer Objektliteraldarstellung verwendet werden, um das Objekt-[[Prototype]] bei der Erstellung festzulegen, als Alternative zuObject.create(). Siehe:Objektinitialisierer / Literalsyntax. Diese Syntax ist standardisiert und in Implementierungen optimiert und unterscheidet sich erheblich vonObject.prototype.__proto__.

Syntax

js
obj.__proto__

Rückgabewert

Wenn sie als Getter verwendet wird, gibt sie das[[Prototype]] des Objekts zurück.

Ausnahmen

TypeError

Wird ausgelöst, wenn versucht wird, das Prototype einesnicht erweiterbaren Objekts oder einesunveränderlichen Prototype-Exotic-Objekts wieObject.prototype oderwindow zu setzen.

Beschreibung

Die__proto__-Getter-Funktion gibt den Wert des internen[[Prototype]] eines Objekts frei. Für Objekte, die mit einem Objektliterat erstellt wurden (sofern Sie nicht diePrototype-Setter-Syntax verwenden), ist dieser WertObject.prototype. Für Objekte, die mit Arrayliteralen erstellt wurden, ist dieser WertArray.prototype. Für Funktionen ist dieser WertFunction.prototype. Sie können mehr über die Prototype-Kette inVererbung und die Prototype-Kette lesen.

Der__proto__-Setter erlaubt es, das[[Prototype]] eines Objekts zu verändern. Der bereitgestellte Wert muss ein Objekt odernull sein. Jede andere Wertangabe bewirkt nichts.

Im Gegensatz zuObject.getPrototypeOf() undObject.setPrototypeOf(), die immer als statische Eigenschaften aufObject verfügbar sind und immer das interne[[Prototype]] widerspiegeln, existiert die__proto__-Eigenschaft nicht immer als Eigenschaft auf allen Objekten und spiegelt daher[[Prototype]] nicht zuverlässig wider.

Die__proto__-Eigenschaft ist lediglich eine Accessor-Eigenschaft aufObject.prototype, bestehend aus einer Getter- und Setter-Funktion. Ein Eigenschaftszugriff auf__proto__, der letztendlichObject.prototype abfragt, wird diese Eigenschaft finden, aber ein Zugriff, derObject.prototype nicht abfragt, wird dies nicht tun. Wenn eine andere__proto__-Eigenschaft gefunden wird, bevorObject.prototype abgefragt wird, wird diese Eigenschaft die aufObject.prototype gefundene Eigenschaft verbergen.

null-Prototype-Objekte erben keine Eigenschaft vonObject.prototype, einschließlich der__proto__-Accessor-Eigenschaft. Wenn Sie also versuchen,__proto__ auf einem solchen Objekt zu lesen, ist der Wert immerundefined, unabhängig vom tatsächlichen[[Prototype]] des Objekts. Jede Zuordnung zu__proto__ würde statt des Setzens des Object-Prototypes eine neue Eigenschaft namens__proto__ erstellen. Darüber hinaus kann__proto__ als eigene Eigenschaft auf jede Objektinstanz durchObject.defineProperty() neu definiert werden, ohne den Setter auszulösen. In diesem Fall wird__proto__ nicht länger als Accessor für[[Prototype]] dienen. Deshalb sollten Sie immerObject.getPrototypeOf() undObject.setPrototypeOf() bevorzugen, um das[[Prototype]] eines Objekts zu setzen und abzurufen.

Beispiele

Verwendung von __proto__

js
function Circle() {}const shape = {};const circle = new Circle();// Set the object prototype.// DEPRECATED. This is for example purposes only. DO NOT DO THIS in real code.shape.__proto__ = circle;// Get the object prototypeconsole.log(shape.__proto__ === Circle); // false
js
function ShapeA() {}const ShapeB = {  a() {    console.log("aaa");  },};ShapeA.prototype.__proto__ = ShapeB;console.log(ShapeA.prototype.__proto__); // { a: [Function: a] }const shapeA = new ShapeA();shapeA.a(); // aaaconsole.log(ShapeA.prototype === shapeA.__proto__); // true
js
function ShapeC() {}const ShapeD = {  a() {    console.log("a");  },};const shapeC = new ShapeC();shapeC.__proto__ = ShapeD;shapeC.a(); // aconsole.log(ShapeC.prototype === shapeC.__proto__); // false
js
function Test() {}Test.prototype.myName = function () {  console.log("myName");};const test = new Test();console.log(test.__proto__ === Test.prototype); // truetest.myName(); // myNameconst obj = {};obj.__proto__ = Test.prototype;obj.myName(); // myName

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-object.prototype.__proto__

Browser-Kompatibilität

Siehe auch

Help improve MDN

Learn how to contribute Diese Seite wurde automatisch aus dem Englischen übersetzt.

[8]ページ先頭

©2009-2025 Movatter.jp