Objectクラスのcreateメソッドは、オブジェクトを生成するためのメソッドです(ES2015(ES6))。
関連ページ
オブジェクトについて[オブジェクトリテラル][プロパティ][メソッド]
スポンサーリンク
実際にいくつかの例において、Object.create()でオブジェクトを生成してみます。
1 2 3 4 5 |
var book1 = { title:'こころ' }; var book2 = Object.create( book1 ); //引数でbook1を指定 console.log( book2.title ); // こころ |
上記コードでは、引数においてオブジェクトの元となるbook1オブジェクトを指定し、新しくbook2オブジェクトを生成しています。book2はbook1を継承しています。
第2引数でプロパティを追加することも可能です。下記コードの4行目では、title2プロパティのvalue属性において、プロパティの値を三四郎に設定しています。
1 2 3 4 5 6 7 |
var book1 = { title1:'こころ' }; var book2 = Object.create( book1,{ title2:{ value:'三四郎'} }); console.log( book2.title2 ); // 三四郎 |
第1引数にObject.prototypeを指定すれば、Objectオブジェクトが元であるオブジェクトが生成されます。
1 2 3 |
var book = Object.create(Object.prototype); //var book = {} と同じ |
関連ページ
プロパティには、value属性の他にも下記のような属性があります。writable、configurable、enumerableはデフォルトではfalseになっています。
value プロパティの値
writable プロパティ値が書き換え可能か (デフォルトでfalse)
configurable 属性の変更、プロパティの削除 (デフォルトでfalse)
enumerable 列挙が可能か (デフォルトでfalse)
get プロパティ値のゲッター関数
set プロパティ値のセッター関数
1 2 3 4 5 |
var book = Object.create(Object.prototype,{ title:{ value:'こころ', writable:false, configurable:false, enumerable:false}, author:{ value:'夏目漱石', writable:false, configurable:false, enumerable:false}, genre:{ value:'文学', writable:false, configurable:false, enumerable:false} }); |
例えばwritableをtrueにすると、プロパティ値を変更することができます。下記コードでは、2行目にて、titleプロパティのwritabeをtrueに指定しています。これでtitleプロパティの値を三四郎に変更できるようになります(7行目)。
1 2 3 4 5 6 7 8 9 |
var book = Object.create(Object.prototype,{ title:{ value:'こころ', writable:true, configurable:false, enumerable:false}, //writableをtrueに指定 author:{ value:'夏目漱石', writable:false, configurable:false, enumerable:false}, genre:{ value:'文学', writable:false, configurable:false, enumerable:false} }); book.title = '三四郎'; console.log( book.title ); //三四郎 |
下記コードでは、2行目の titleのconfigurableをtrueにしています。これでtitleプロパティを削除することが可能となります(7行目)。またenumerableをtrueにしているので、プロパティの列挙が可能となっています。
1 2 3 4 5 6 7 8 9 10 11 |
var book = Object.create(Object.prototype,{ title:{ value:'こころ', writable:false, configurable:true, enumerable:true}, author:{ value:'夏目漱石', writable:false, configurable:false, enumerable:true}, genre:{ value:'文学', writable:false, configurable:false, enumerable:true} }); delete book.title; // titleを削除 for (var prop in book){ console.log(prop, book[prop]); //「author - 夏目漱石」と「genre - 文学」のみが列挙される。 } |
引数にnullを指定すると、完全に空のオブジェクトが生成されます。
1 2 |
var obj = Object.create( null ); console.log( obj.toString() ); //エラーとなる |