セット(またはマップ)を「フリーズ」することは可能ですか?質問する

セット(またはマップ)を「フリーズ」することは可能ですか?質問する

Setはオブジェクトですが、Object.freeze()オブジェクトのプロパティに作用します。明らかに Map と Set はこれを使用しません。例:

let m = new Map();
Object.freeze(m);
m.set('key', 55);
m.get('key'); // ==> 55

これは Chrome の動作であり、標準であると思われます。

Set または Map を通常のオブジェクトに変換し、そのオブジェクトをフリーズすると、フリーズされていないバージョンとフリーズされたバージョンの間でキー アクセスが変わる場合があることは理解しています。

ベストアンサー1

Set興味深い質問ですが、現時点ではまたはオブジェクトで直接サポートされている機能ではないようですMap

Setオブジェクトをガイドとして使用して考えられる回避策をいくつか示します。

  1. 、およびを削除し.add()、データを読み取るだけの他のすべてのメソッドへのプロキシ アクセスを許可するプロキシ オブジェクトを作成できます。これにより、実際のオブジェクトへのアクセスが非表示になるため、オブジェクトに直接アクセスして他のすべてのメソッドへのプロキシ アクセスを提供する方法がなくなります。.clear().delete()Set

  2. 特定のインスタンスで、、.add()およびを、何もしないか、変更を妨げる例外をスローするメソッドでオーバーライドできます。これらのオーバーライド メソッドを構成不可にして、オブジェクトで を実行した場合、これらのメソッドは元に戻せません。ただし、オブジェクトで直接を使用して、これをバイパスすることはできます。.clear().delete()Set.freeze()Set.prototype.addSet

おすすめ記事