JavaScript オブジェクト 新しいページはコチラ
提供: yonewiki
(→.freeze 関数) |
(→.isFrozen 関数) |
||
1,484行: | 1,484行: | ||
== .isFrozen 関数 == | == .isFrozen 関数 == | ||
− | * | + | *Object.isFrozen(obj000) |
− | : | + | :上記のようにするとobj000がFreeze状態かを調べることができて、Freeze状態と同等ならtrueとなります。具体的には3つのチェックがなされます。 |
+ | #拡張不能状態になっているか? | ||
+ | #writeble値はfalseか? | ||
+ | #configuratable値はfalseか? | ||
+ | :3つ全てが成り立っていればtrueとなります。そのことがわかるようなサンプルが以下のようなものになります。 | ||
サンプル | サンプル | ||
<syntaxhighlight lang="javascript" line start="1"> | <syntaxhighlight lang="javascript" line start="1"> | ||
+ | <HTML> | ||
+ | <HEAD> | ||
+ | <TITLE>JavaScript isFrozen</TITLE> | ||
+ | </HEAD> | ||
+ | <BODY> | ||
+ | JavaScript isFrozen<br /> | ||
+ | <SCRIPT Language="JavaScript"> | ||
+ | <!-- | ||
+ | var obj000 = { | ||
+ | x000:{ | ||
+ | value:"data000", | ||
+ | } | ||
+ | }; | ||
+ | var obj001 = { | ||
+ | x001:{ | ||
+ | value:"data001", | ||
+ | } | ||
+ | }; | ||
+ | var obj010 = { | ||
+ | x010:{ | ||
+ | value:"data010", | ||
+ | } | ||
+ | }; | ||
+ | var obj011 = { | ||
+ | x011:{ | ||
+ | value:"data011", | ||
+ | } | ||
+ | }; | ||
+ | var obj100 = { | ||
+ | x100:{ | ||
+ | value:"data100", | ||
+ | } | ||
+ | }; | ||
+ | var obj101 = { | ||
+ | x101:{ | ||
+ | value:"data101", | ||
+ | } | ||
+ | }; | ||
+ | var obj110 = { | ||
+ | x110:{ | ||
+ | value:"data110", | ||
+ | } | ||
+ | }; | ||
+ | var obj111 = { | ||
+ | x111:{ | ||
+ | value:"data111", | ||
+ | } | ||
+ | }; | ||
+ | Object.defineProperty(obj000, "x000", { | ||
+ | value: "data000", | ||
+ | writable: false, | ||
+ | enumerable: false, | ||
+ | configurable: false | ||
+ | }); | ||
+ | Object.defineProperty(obj001, "x001", { | ||
+ | value: "data001", | ||
+ | writable: false, | ||
+ | enumerable: false, | ||
+ | configurable: true | ||
+ | }); | ||
+ | Object.defineProperty(obj010, "x010", { | ||
+ | value: "data010", | ||
+ | writable: false, | ||
+ | enumerable: true, | ||
+ | configurable: false | ||
+ | }); | ||
+ | Object.defineProperty(obj011, "x011", { | ||
+ | value: "data011", | ||
+ | writable: false, | ||
+ | enumerable: true, | ||
+ | configurable: true | ||
+ | }); | ||
+ | Object.defineProperty(obj100, "x100", { | ||
+ | value: "data100", | ||
+ | writable: true, | ||
+ | enumerable: false, | ||
+ | configurable: false | ||
+ | }); | ||
+ | Object.defineProperty(obj101, "x101", { | ||
+ | value: "data101", | ||
+ | writable: true, | ||
+ | enumerable: false, | ||
+ | configurable: true | ||
+ | }); | ||
+ | Object.defineProperty(obj110, "x110", { | ||
+ | value: "data110", | ||
+ | writable: true, | ||
+ | enumerable: true, | ||
+ | configurable: false | ||
+ | }); | ||
+ | Object.defineProperty(obj111, "x111", { | ||
+ | value: "data111", | ||
+ | writable: true, | ||
+ | enumerable: true, | ||
+ | configurable: true | ||
+ | }); | ||
+ | function objFunc(){ | ||
+ | this.nValue1 = 100; | ||
+ | this.nValue2 = 200; | ||
+ | } | ||
+ | document.write("■isFrozen<BR />"); | ||
+ | document.write("obj000 = ", Object.isFrozen(obj000), "<BR />"); | ||
+ | document.write("obj001 = ", Object.isFrozen(obj001), "<BR />"); | ||
+ | document.write("obj010 = ", Object.isFrozen(obj010), "<BR />"); | ||
+ | document.write("obj011 = ", Object.isFrozen(obj011), "<BR />"); | ||
+ | document.write("obj100 = ", Object.isFrozen(obj100), "<BR />"); | ||
+ | document.write("obj101 = ", Object.isFrozen(obj101), "<BR />"); | ||
+ | document.write("obj110 = ", Object.isFrozen(obj110), "<BR />"); | ||
+ | document.write("obj111 = ", Object.isFrozen(obj111), "<BR />"); | ||
+ | |||
+ | Object.preventExtensions(obj000); | ||
+ | Object.preventExtensions(obj001); | ||
+ | Object.preventExtensions(obj010); | ||
+ | Object.preventExtensions(obj011); | ||
+ | Object.preventExtensions(obj100); | ||
+ | Object.preventExtensions(obj101); | ||
+ | Object.preventExtensions(obj110); | ||
+ | Object.preventExtensions(obj111); | ||
+ | |||
+ | |||
+ | document.write("■オブジェクト拡張不能化後のisFrozen<BR />"); | ||
+ | document.write("obj000 = ", Object.isFrozen(obj000), "<BR />"); | ||
+ | document.write("obj001 = ", Object.isFrozen(obj001), "<BR />"); | ||
+ | document.write("obj010 = ", Object.isFrozen(obj010), "<BR />"); | ||
+ | document.write("obj011 = ", Object.isFrozen(obj011), "<BR />"); | ||
+ | document.write("obj100 = ", Object.isFrozen(obj100), "<BR />"); | ||
+ | document.write("obj101 = ", Object.isFrozen(obj101), "<BR />"); | ||
+ | document.write("obj110 = ", Object.isFrozen(obj110), "<BR />"); | ||
+ | document.write("obj111 = ", Object.isFrozen(obj111), "<BR />"); | ||
+ | |||
+ | Object.freeze(obj111); | ||
+ | |||
+ | //オブジェクトの拡張 フリーズしているため無効 | ||
+ | obj111.property1 = 100; | ||
+ | |||
+ | var propertydescriptor = Object.getOwnPropertyDescriptor(obj111, "x111"); | ||
+ | |||
+ | document.write("■obj111のデータ記述子<BR />"); | ||
+ | for(var property in propertydescriptor){ | ||
+ | document.write("property = ", property, ", propertydescriptor[", property ,"] = ", propertydescriptor[property], "<BR />"); | ||
+ | } | ||
+ | document.write("■obj000の保持値<BR />"); | ||
+ | document.write("obj000.value = ", obj000.x000, "<BR />"); | ||
+ | |||
+ | |||
+ | |||
+ | delete obj000.x000; | ||
+ | |||
+ | document.write("■deleteキーワード使用後、obj000の保持値<BR />"); | ||
+ | document.write("obj000.value = ", obj000.x000, "<BR />"); | ||
+ | |||
+ | var propertydescriptor000 = Object.getOwnPropertyDescriptor(obj000, "x000"); | ||
+ | |||
+ | document.write("■deleteキーワード使用後、obj000のデータ記述子<BR />"); | ||
+ | for(var property in propertydescriptor000){ | ||
+ | document.write("property000 = ", property, ", propertydescriptor000[", property ,"] = ", propertydescriptor000[property], "<BR />"); | ||
+ | } | ||
+ | |||
+ | --> | ||
+ | </SCRIPT> | ||
+ | </BODY> | ||
+ | </HTML> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
[[Media:JavaScript Object isFrozen.html|実行結果サンプル]] | [[Media:JavaScript Object isFrozen.html|実行結果サンプル]] | ||
− | |||
== .preventExtensions 関数 == | == .preventExtensions 関数 == |