JavaScript オブジェクト 新しいページはコチラ
提供: yonewiki
(→.defineProperties 関数) |
(→.defineProperty 関数) |
||
1,003行: | 1,003行: | ||
== .defineProperty 関数 == | == .defineProperty 関数 == | ||
− | * | + | *Object.defineProperty(objCreate1,"data_x",propertydescriptor); |
− | : | + | :前述のdefinePropertiesが複数のオブジェクト記述子に対して、プロパティ記述子を定義するものだったのに対して、definePropertyは一つのオブジェクト記述子に対して、プロパティ記述子を定義するものです。上記の例ではdata_xというオブジェクト記述子で定義したプロパティをobjCreate1オブジェクトにぶら下げると共に、そのプロパティのプロパティ記述子としてprpertydescriptorの値が設定されます。サンプルはcreateの項目でも示したものと同じで、20行目が実際に定義をしている部分になります。descriptorという変数にプロパティ記述子の値を格納し、defineProperty関数の第三引数として適切な形式を得ることができる関数getOwnPropertyDescriptorを利用するところがポイントです。 |
+ | |||
+ | |||
+ | 同じサンプルをもう一度掲載しておきます。 | ||
サンプル | サンプル | ||
<syntaxhighlight lang="javascript" line start="1"> | <syntaxhighlight lang="javascript" line start="1"> | ||
+ | <HTML> | ||
+ | <HEAD> | ||
+ | <TITLE>JavaScript create</TITLE> | ||
+ | </HEAD> | ||
+ | <BODY> | ||
+ | JavaScript create<br /> | ||
+ | <SCRIPT Language="JavaScript"> | ||
+ | <!-- | ||
+ | var obj = {}; | ||
+ | var objCreate = Object.create(null, {x:{value:"create_x" ,writable:true}}); | ||
+ | var objCreate2 = Object.create(Object.prototype,{x:{value:"create2_x",writable:true}}); | ||
+ | var objCreate3 = Object.create(Object.getPrototypeOf(obj), {x:{value:"create3_x",writable:true}}); | ||
+ | obj.newDataProperty = "obj_newDataProperty"; | ||
+ | |||
+ | var descriptor = Object.getOwnPropertyDescriptor(obj, "newDataProperty"); | ||
+ | |||
+ | |||
+ | descriptor.writable = false; | ||
+ | Object.defineProperty(obj, "newDataProperty", descriptor); | ||
+ | |||
+ | |||
+ | var desc = Object.getOwnPropertyDescriptor(obj, "newDataProperty"); | ||
+ | var desc1 = Object.getOwnPropertyDescriptor(objCreate, "x"); | ||
+ | var desc2 = Object.getOwnPropertyDescriptor(objCreate2, "x"); | ||
+ | var desc3 = Object.getOwnPropertyDescriptor(objCreate3, "x"); | ||
+ | |||
+ | |||
+ | document.write("■obj.newDataPropertyのプロパティ記述子の出力<br />"); | ||
+ | for (var prop in desc) { | ||
+ | document.write(prop + ': ' + desc[prop]); | ||
+ | document.write("<br />"); | ||
+ | } | ||
+ | |||
+ | document.write("■objCreate.xのプロパティ記述子の出力<br />"); | ||
+ | for (var prop in desc1) { | ||
+ | document.write(prop + ': ' + desc1[prop]); | ||
+ | document.write("<br />"); | ||
+ | } | ||
+ | |||
+ | document.write("■objCreate2.xのプロパティ記述子の出力<br />"); | ||
+ | for (var prop in desc2) { | ||
+ | document.write(prop + ': ' + desc2[prop]); | ||
+ | document.write("<br />"); | ||
+ | } | ||
+ | |||
+ | document.write("■objCreate3.xのプロパティ記述子の出力<br />"); | ||
+ | for (var prop in desc3) { | ||
+ | document.write(prop + ': ' + desc3[prop]); | ||
+ | document.write("<br />"); | ||
+ | } | ||
+ | --> | ||
+ | </SCRIPT> | ||
+ | </BODY> | ||
+ | </HTML> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
[[Media:JavaScript Object defineProperty.html|実行結果サンプル]] | [[Media:JavaScript Object defineProperty.html|実行結果サンプル]] | ||
− | |||
== .freeze 関数 == | == .freeze 関数 == |