Object.create()

編集

Object.create() は、新しいオブジェクトを生成し、そのオブジェクトのプロトタイプを指定したオブジェクトに設定するためのメソッドです。このメソッドは、指定したプロトタイプを持つ新しいオブジェクトを返します。

基本構文

編集
Object.create(proto, propertiesObject)
  • proto: 新しく作成されるオブジェクトのプロトタイプとなるオブジェクト。null を指定することもできます。
  • propertiesObject(省略可能): 新しいオブジェクトの追加のプロパティを定義するオブジェクト。デフォルトでは undefined です。

戻り値

編集

Object.create() は、新しく作成されたオブジェクトを返します。返されるオブジェクトは、指定したプロトタイプを持ち、オプションで追加のプロパティを持つことができます。

使用例

編集
// 基本的な使用例
const person = {
  greet: function() {
    console.log("Hello, " + this.name);
  }
};

const john = Object.create(person);
john.name = "John";
john.greet(); // "Hello, John" と出力される

propertiesObject を使った例

編集

propertiesObject を指定すると、生成されるオブジェクトに特定のプロパティを追加できます。これにより、プロパティの属性(writableenumerableconfigurable)を制御できます。

const obj = Object.create({}, {
  property1: {
    value: 42,
    writable: true,
    enumerable: true,
    configurable: true
  }
});

console.log(obj.property1); // 42

プロトタイプチェーンの設定

編集

Object.create() の主な用途の1つは、オブジェクトのプロトタイプチェーンを設定することです。新しいオブジェクトが特定のオブジェクトを継承するように設定できます。

const animal = {
  speak: function() {
    console.log("Animal sound");
  }
};

const dog = Object.create(animal);
dog.speak(); // "Animal sound" と出力される

null をプロトタイプとして指定

編集

Object.create() を使って、プロトタイプが null のオブジェクトを作成することもできます。これにより、オブジェクトはプロトタイプチェーンを持たない純粋なオブジェクトになります。

const obj = Object.create(null);
obj.someProperty = "Hello";
console.log(obj.someProperty); // "Hello"
console.log(Object.getPrototypeOf(obj)); // null

注意点

編集
  • propertiesObject は省略可能ですが、指定すると新しいオブジェクトのプロパティを設定できます。指定されたプロパティには、プロパティの属性(writableenumerableconfigurable)を制御するための詳細なオプションを指定できます。
  • Object.create(null) は、プロトタイプチェーンがないオブジェクトを生成するために便利です。この方法で作成されたオブジェクトは、Object.prototype のメソッド(例えば、toString()hasOwnProperty())を持ちません。

使用例のまとめ

編集
// プロトタイプを設定して新しいオブジェクトを作成
const animal = {
  makeSound: function() { console.log("Some sound"); }
};
const dog = Object.create(animal);
dog.makeSound(); // "Some sound"

// プロパティを設定して新しいオブジェクトを作成
const obj = Object.create({}, {
  name: {
    value: "John",
    writable: true,
    enumerable: true,
    configurable: true
  }
});
console.log(obj.name); // "John"

// プロトタイプを null に設定したオブジェクトを作成
const emptyObj = Object.create(null);
console.log(Object.getPrototypeOf(emptyObj)); // null

まとめ

編集
  • Object.create() は、新しいオブジェクトを生成し、そのプロトタイプを指定したオブジェクトに設定するメソッドです。
  • プロトタイプを指定することで、継承関係を簡単に設定できます。
  • propertiesObject を使うことで、生成されたオブジェクトに特定のプロパティを設定できます。
  • null をプロトタイプに設定することで、プロトタイプチェーンを持たない純粋なオブジェクトを作成することができます。