JavaScript/Object/create
< JavaScript | Object
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
を指定すると、生成されるオブジェクトに特定のプロパティを追加できます。これにより、プロパティの属性(writable
、enumerable
、configurable
)を制御できます。
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" と出力される
Object.create()
を使って、プロトタイプが null
のオブジェクトを作成することもできます。これにより、オブジェクトはプロトタイプチェーンを持たない純粋なオブジェクトになります。
const obj = Object.create(null); obj.someProperty = "Hello"; console.log(obj.someProperty); // "Hello" console.log(Object.getPrototypeOf(obj)); // null
注意点
編集propertiesObject
は省略可能ですが、指定すると新しいオブジェクトのプロパティを設定できます。指定されたプロパティには、プロパティの属性(writable
、enumerable
、configurable
)を制御するための詳細なオプションを指定できます。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
をプロトタイプに設定することで、プロトタイプチェーンを持たない純粋なオブジェクトを作成することができます。