Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. JavaScript-Referenz
  4. Eingebaute Standardobjekte
  5. Objekt
  6. create()

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

View in EnglishAlways switch to English

Object.create()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨Juli 2015⁩.

DieObject.create() statische Methode erstellt ein neues Objekt, indem sie ein vorhandenes Objekt als Prototyp des neu erstellten Objekts verwendet.

Probieren Sie es aus

const person = {  isHuman: false,  printIntroduction() {    console.log(`My name is ${this.name}. Am I human? ${this.isHuman}`);  },};const me = Object.create(person);me.name = "Matthew"; // "name" is a property set on "me", but not on "person"me.isHuman = true; // Inherited properties can be overwrittenme.printIntroduction();// Expected output: "My name is Matthew. Am I human? true"

Syntax

js
Object.create(proto)Object.create(proto, propertiesObject)

Parameter

proto

Das Objekt, das der Prototyp des neu erstellten Objekts sein sollte.

propertiesObjectOptional

Falls angegeben und nichtundefined, ein Objekt, dessenaufzählbare eigene Eigenschaften Eigenschaftsdeskriptoren angeben, die dem neu erstellten Objekt mit den entsprechenden Eigenschaftsnamen hinzugefügt werden sollen. Diese Eigenschaften entsprechen dem zweiten Argument vonObject.defineProperties().

Rückgabewert

Ein neues Objekt mit dem angegebenen Prototyp-Objekt und den Eigenschaften.

Ausnahmen

TypeError

Wird ausgelöst, wennproto wedernull noch einObject ist.

Beispiele

Klassische Vererbung mit Object.create()

Nachfolgend ist ein Beispiel, wieObject.create() verwendet wird, um klassische Vererbung zu erreichen. Dies ist für eine einzelne Vererbung, was JavaScript unterstützt.

js
// Shape - superclassfunction Shape() {  this.x = 0;  this.y = 0;}// superclass methodShape.prototype.move = function (x, y) {  this.x += x;  this.y += y;  console.info("Shape moved.");};// Rectangle - subclassfunction Rectangle() {  Shape.call(this); // call super constructor.}// subclass extends superclassRectangle.prototype = Object.create(Shape.prototype, {  // If you don't set Rectangle.prototype.constructor to Rectangle,  // it will take the prototype.constructor of Shape (parent).  // To avoid that, we set the prototype.constructor to Rectangle (child).  constructor: {    value: Rectangle,    enumerable: false,    writable: true,    configurable: true,  },});const rect = new Rectangle();console.log("Is rect an instance of Rectangle?", rect instanceof Rectangle); // trueconsole.log("Is rect an instance of Shape?", rect instanceof Shape); // truerect.move(1, 1); // Logs 'Shape moved.'

Beachten Sie, dass es Vorsichtsmaßnahmen gibt, auf die Sie bei der Verwendung voncreate() achten müssen, wie z.B. das erneute Hinzufügen derconstructor-Eigenschaft, um die korrekten Semantiken sicherzustellen. ObwohlObject.create() als leistungsstärker als das Mutieren des Prototyps mitObject.setPrototypeOf() betrachtet wird, ist der Unterschied tatsächlich vernachlässigbar, wenn noch keine Instanzen erstellt wurden und auf Eigenschaften noch nicht optimiert zugegriffen wurde. Im modernen Code sollte in jedem Fall dieclass-Syntax bevorzugt werden.

Verwenden des parameters propertiesObject mit Object.create()

Object.create() ermöglicht eine fein abgestimmte Kontrolle über den Objekt-Erstellungsprozess. DieObjektinitialisierer-Syntax ist tatsächlich ein Syntaxzucker vonObject.create(). MitObject.create() können wir Objekte mit einem bestimmten Prototyp und auch mit einigen Eigenschaften erstellen. Beachten Sie, dass der zweite Parameter Schlüssel aufEigenschaftsdeskriptoren abbildet — das bedeutet, dass Sie die Aufzählbarkeit, Konfigurierbarkeit usw. jeder Eigenschaft ebenfalls steuern können, was in Objektinitialisierern nicht möglich ist.

js
o = {};// Is equivalent to:o = Object.create(Object.prototype);o = Object.create(Object.prototype, {  // foo is a regular data property  foo: {    writable: true,    configurable: true,    value: "hello",  },  // bar is an accessor property  bar: {    configurable: false,    get() {      return 10;    },    set(value) {      console.log("Setting `o.bar` to", value);    },  },});// Create a new object whose prototype is a new, empty// object and add a single property 'p', with value 42.o = Object.create({}, { p: { value: 42 } });

MitObject.create() können wir ein Objektmitnull als Prototyp erstellen. Die entsprechende Syntax in Objektinitialisierern wäre der__proto__-Schlüssel.

js
o = Object.create(null);// Is equivalent to:o = { __proto__: null };

Standardmäßig sind Eigenschaftennicht schreibbar, aufzählbar oder konfigurierbar.

js
o.p = 24; // throws in strict modeo.p; // 42o.q = 12;for (const prop in o) {  console.log(prop);}// 'q'delete o.p;// false; throws in strict mode

Um eine Eigenschaft mit denselben Attributen wie in einem Initialisierer anzugeben, musswritable,enumerable undconfigurable explizit angegeben werden.

js
o2 = Object.create(  {},  {    p: {      value: 42,      writable: true,      enumerable: true,      configurable: true,    },  },);// This is not equivalent to:// o2 = Object.create({ p: 42 })// which will create an object with prototype { p: 42 }

Sie könnenObject.create() verwenden, um das Verhalten desnew-Operators nachzuahmen.

js
function Constructor() {}o = new Constructor();// Is equivalent to:o = Object.create(Constructor.prototype);

Natürlich kann, wenn es tatsächlichen Initialisierungscode in derConstructor-Funktion gibt, dieObject.create()-Methode diesen nicht wiedergeben.

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-object.create

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