2011-09-16 10 views

答えて

2

何もに追加されていないか、凍結された オブジェクトのプロパティを設定から削除することができます。サイレントモードで、または TypeError例外をスローすることで失敗します(通常、strictモードの では排他的ではありません)。

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/freeze

あなたはこのようにそれについて考えることができます。

if(typeof ChuckNorris === 'undefined') { 
    ChuckNorris = Object.create([Infinity], { 
     canCountTo: { 
      value: Infinity * 2, 
      writable: true, 
      configurable: true 
     } 
    }); 

    Object.freeze(ChuckNorris); // nothing can harm Chuck anymore ! 
} 

console.log(ChuckNorris.canCountTo); // Infinity 
delete ChuckNorris.canCountTo; 
console.log(ChuckNorris.canCountTo); // Infinity 

だから、基本的に、freezeは、作成後にfalseにオブジェクトwritableconfigurableフラグを設定します。

+0

これで、これらのフラグをtrueに戻すことができるようになりましたか? –

+0

私は間違ってはいけない私はこういう風が好きです:Pですが、JavaScriptを使って決して確実にすることはできません...オブジェクトを再び変更可能にすることができれば、この機能に頼る必要はありません。 –

+0

JSエンジンがネイティブにサポートしているときに、フリーズされたオブジェクトのプロパティを変更する方法はありません。 – jAndy

1

いいえ、Object.freezeのアイデアはあなたがもうそれを変更できないということです。 documentation

本質的にオブジェクトは効果的に不変になります。

と:

何を加えないか、または凍結オブジェクトのセットの特性から除去することができます。そうしようとする試みは失敗し、...

+0

だから、基本的に私はこれを使って物を「プライベート」にすることができますか? –

+0

@Mike Shinola:「プライベート」の定義方法によって異なります。その値は変更することはできませんが、それでも読み取ることができます。 – pimvdb

関連する問題