[JavaScript]Object.create
1973 ワード
使い方
(1)
注:
(2)
注:
例
(2)
(3)オブジェクトの属性記述子には、データ記述子とアクセス記述子の2つの形態があります.
MDN:Object.creat MDN:Object.get ProttypeOf
Object.create(proto, [ propertiesObject ])
この方法は、プロトタイプと特定の属性を持つオブジェクトを作成します.(1)
proto
のオブジェクトは、新規作成対象の原型となる.注:
proto
パラメータがnullまたはオブジェクト値でない場合、TypeError
が例外となります.(2)
propertiesObject
は任意である.このパラメータオブジェクトは属性と値のセットであり、オブジェクトの属性名は新たに作成されるオブジェクトの属性名であり、値は属性記述子(これらの属性記述子の構造はObject.defineProperties()の2番目のパラメータと同じ)である.注:
propertiesObject
はundefined
ではなく、オブジェクト自体が持つエニュメレート・属性だけが有効であり、プロトタイプチェーン上の属性は無効である.例
var a=Object.create(null); // __proto__ null
var b=Object.create(Object.prototype); // new Object, {}
var base={
v:1
};
var sub=Object.create(base); // sub.__proto__===base,
console.log(sub.v); //1
var obj=Object.create(Object.prototype,{
v:{
configurable:true,
enumerable:true,
writable:true,
value:1
}
});
注:(1)configurable===false
の場合は、configurable
およびenumerable
を変更することはできません.writable
をtrue
からfalse
に変更することができますが、false
からtrue
に変更することはできません.value
が変更できるかどうかはwritable
による.(2)
writable===false
obj.v
の再割当は、エラーが発生しないだけである.(3)オブジェクトの属性記述子には、データ記述子とアクセス記述子の2つの形態があります.
:
configurable:false
enumerable:false
:
writable:false
value:undefined
:
get:undefined
set:undefined
(4)Object.defineProperty
は、副作用があるとobj
を変更するが、変更後の同じobj
オブジェクトを返します.var obj2=Object.defineProperty(obj,'v',...)
obj2===obj
(5)Object.getPrototypeOf
を使用してオブジェクトのプロトタイプを取得することができる(__proto__
に相当)var obj = Object.create(proto);
Object.getPrototypeOf(obj) === proto
参照MDN:Object.creat MDN:Object.get ProttypeOf