Object.freeze()
Object.freeze()はオブジェクトを凍結させ改変付加の状態にするためのメソッドです。
Object.freeze()により凍結されたオブジェクトは以下のような特徴をもちます。
var bar = {foo:"haa"};
Object.freeze(bar);
console.log(bar.foo);//haa
//プロパティ(メソッド)の変更は付加
bar.foo = "raa";
console.log(bar.foo);//haa
//プロパティ(メソッド)の追加は不可
bar.gaa = "doo";
console.log(bar.gaa);//undefined
//プロパティ(メソッド)の削除は不可
delete bar.foo;
console.log(bar.foo);//haa
凍結されたかどうかはObject.isFrozen()で確認することができます。
var bar = {foo:"haa"};
console.log(Object.isFrozen(bar));//false
Object.freeze(bar);
console.log(Object.isFrozen(bar));//true
凍結されたオブジェクトはExtensible属性がfalseに変更されることで追加ができなくなり、Configurable属性がfalseに変更されることで削除ができなくなり、Writable属性がfalseに変更されることで変更ができなくなります。
Extensible属性がfalseに変更されたことはObject.isExtensible()で確認できます。
var bar = {foo:"haa"};
console.log(Object.isExtensible(bar));//true
Object.freeze(bar);
console.log(Object.isExtensible(bar));//false
Configurable属性とWritable属性がfalseに変更されたことはObject.getOwnPropertyDescriptor()で確認できます。
var bar = {foo:"haa"};
console.log(Object.getOwnPropertyDescriptor(bar,"foo")['configurable']);//true
console.log(Object.getOwnPropertyDescriptor(bar,"foo")['writable']);//true
Object.freeze(bar);
console.log(Object.getOwnPropertyDescriptor(bar,"foo")['configurable']);//false
console.log(Object.getOwnPropertyDescriptor(bar,"foo")['writable']);//false
また凍結されたオブジェクトはその性質上、シール(保護)された状態であることをObject.isSealed()を用いて確認することができます。
var bar = {foo:"haa"};
console.log(Object.isSealed(bar));//false
Object.freeze(bar);
console.log(Object.isSealed(bar));//true
登録日 : 2015年08月18日 最終更新日 : 2015年8月18日
同じカテゴリー(Object)のエントリー
- Object.create()
- Object.getPrototypeOf()
- Object.isFrozen()
- Object.freeze()
- Object.isSealed()
- Object.seal()
- Object.isExtensible()
- Object.preventExtensions()
- Object.getOwnPropertyDescriptor()
- Object.defineProperties()
- Object.defineProperty()
- keys()
- valueOf()
- toString()
- toLocaleString()
- propertyisEnumerable()
- isProtoTypeOf()
- hasOwnProperty
- constructor