| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Object/proto | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Avoid using this feature in new projects.
Changing __proto__ is slow and can cause surprising bugs.
This feature may be a candidate for removal from web standards or browsers.
Warnung:
Das ndern des [[Prototype]] eines Objekts ist aufgrund der Art und Weise, wie moderne JavaScript-Engines den Zugriff auf Eigenschaften optimieren, derzeit eine sehr langsame Operation in jedem Browser und jeder JavaScript-Engine. Darber hinaus sind die Auswirkungen der nderung der Vererbung subtil und weitreichend und beschrnken sich nicht auf die im obj.__proto__ = ...-Statement verbrachte Zeit, sondern knnen sich auf jeden Code auswirken, der Zugriff auf ein beliebiges Objekt hat, dessen [[Prototype]] gendert wurde. Mehr dazu knnen Sie in JavaScript-Engine-Grundlagen: Prototypen optimieren lesen.
Hinweis:
Die Verwendung von __proto__ ist umstritten und wird nicht empfohlen. Seine Existenz und exakte Verhaltensweise wurden nur als Legacy-Feature standardisiert, um die Web-Kompatibilitt zu gewhrleisten, whrend es mehrere Sicherheitsprobleme und Tcken aufweist. Fr besseren Support sollten Sie statt dessen Object.getPrototypeOf()/Reflect.getPrototypeOf() und Object.setPrototypeOf()/Reflect.setPrototypeOf() bevorzugen.
Die __proto__ Accessor-Eigenschaft von Object-Instanzen gibt das [[Prototype]] (entweder ein Objekt oder null) dieses Objekts preis.
Die __proto__-Eigenschaft kann auch in einer Objektliteraldefinition verwendet werden, um das Objekt-[[Prototype]] bei der Erstellung festzulegen, als Alternative zu Object.create(). Siehe: Objektinitialisierer / -literalsyntax. Diese Syntax ist standardisiert und in Implementierungen optimiert und unterscheidet sich erheblich von Object.prototype.__proto__.
obj.__proto__
Wenn als Getter verwendet, gibt es das [[Prototype]] des Objekts zurck.
TypeErrorWird ausgelst, wenn versucht wird, das Prototype eines nicht-erweiterbaren Objekts oder eines unvernderlichen Prototype-Exotenobjekts wie Object.prototype oder window zu setzen.
Die __proto__-Getter-Funktion gibt den Wert des internen [[Prototype]] eines Objekts preis. Fr Objekte, die mit einem Objektliteral erstellt wurden (es sei denn, Sie verwenden die prototype setter-Syntax), ist dieser Wert Object.prototype. Fr mit Array-Literalen erstellte Objekte ist dieser Wert Array.prototype. Fr Funktionen ist dieser Wert Function.prototype. Mehr ber die Prototypkette knnen Sie in Vererbung und die Prototypkette lesen.
Der __proto__-Setter erlaubt das Mutieren des [[Prototype]] eines Objekts. Der gegebene Wert muss ein Objekt oder null sein. Jeder andere Wert wird ohne Effekt bleiben.
Im Gegensatz zu Object.getPrototypeOf() und Object.setPrototypeOf(), die immer als statische Eigenschaften auf Object verfgbar sind und immer das interne [[Prototype]]-Eigentum widerspiegeln, existiert die __proto__-Eigenschaft nicht immer als Eigenschaft auf allen Objekten und spiegelt daher [[Prototype]] nicht zuverlssig wider.
Die __proto__-Eigenschaft ist lediglich eine Accessor-Eigenschaft auf Object.prototype, bestehend aus einer Getter- und Setter-Funktion. Ein Eigenschaftszugriff auf __proto__, der letztendlich Object.prototype abfragt, wird diese Eigenschaft finden, aber ein Zugriff, der Object.prototype nicht abfragt, wird es nicht. Wenn eine andere __proto__-Eigenschaft gefunden wird, bevor Object.prototype abgefragt wird, wird diese Eigenschaft die auf Object.prototype gefundene ausblenden.
null-Prototyp-Objekte erben keine Eigenschaft von Object.prototype, einschlielich der __proto__-Accessor-Eigenschaft. Wenn Sie also versuchen, __proto__ auf einem solchen Objekt zu lesen, ist der Wert immer undefined, unabhngig vom tatschlichen [[Prototype]] des Objekts, und jede Zuweisung an __proto__ wrde eine neue Eigenschaft namens __proto__ schaffen, anstatt das Prototyp des Objekts zu setzen. Darber hinaus kann __proto__ als eigene Eigenschaft auf jeder Objektinstanz ber Object.defineProperty() neu definiert werden, ohne den Setter auszulsen. In diesem Fall wird __proto__ kein Accessor mehr fr [[Prototype]] sein. Daher sollten Sie immer Object.getPrototypeOf() und Object.setPrototypeOf() fr das Setzen und Abrufen des [[Prototype]] eines Objekts bevorzugen.
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 prototype
console.log(shape.__proto__ === Circle); // false
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(); // aaa
console.log(ShapeA.prototype === shapeA.__proto__); // true
function ShapeC() {}
const ShapeD = {
a() {
console.log("a");
},
};
const shapeC = new ShapeC();
shapeC.__proto__ = ShapeD;
shapeC.a(); // a
console.log(ShapeC.prototype === shapeC.__proto__); // false
function Test() {}
Test.prototype.myName = function () {
console.log("myName");
};
const test = new Test();
console.log(test.__proto__ === Test.prototype); // true
test.myName(); // myName
const obj = {};
obj.__proto__ = Test.prototype;
obj.myName(); // myName
| Spezifikation |
|---|
| ECMAScript 2027 LanguageSpecification # sec-object.prototype.__proto__ |
Object.prototype.isPrototypeOf()Object.getPrototypeOf()Object.setPrototypeOf()Objectassign()create()defineProperties()defineProperty()entries()freeze()fromEntries()getOwnPropertyDescriptor()getOwnPropertyDescriptors()getOwnPropertyNames()getOwnPropertySymbols()getPrototypeOf()groupBy()hasOwn()is()isExtensible()isFrozen()isSealed()keys()preventExtensions()seal()setPrototypeOf()values()Object/FunctionDer Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |