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)のエントリー

検索

スポンサードリンク

バージョン

リファレンス