2015-07-20 24 views
9

Set bir nesne, besbelli Harita ve Set kullanmayan nesnenin özelliklerine Object.freeze() eserler ise: örneğinBir Kümeyi (veya Haritası) "dondurmak" mümkün mü?

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

bu Chrome'da davranıştır ve bunu standarttır bekliyoruz.

Kümenin (bazen) Kümeyi veya Harita'yı normal bir Nesneye dönüştürebildiğini ve ardından nesneyi dondurabileceğini anlıyorum. ancak daha sonra anahtar erişim donmamış ve donmuş sürüm arasında değişir.

+1

Hangi Set ve Map kullanıyorsunuz? – MaxZoom

+1

@MaxZoom'da böyle bir şey görmedim: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map https://developer.mozilla.org/en-US/ docs/Web/JavaScript/Reference/Global_Objects/Set –

+0

Mobil tarayıcılar için iyi görünmüyor. – MaxZoom

cevap

4

İlginç bir soru, ancak şu anda Set veya Map nesnesinde doğrudan desteklenen bir özellik gibi görünmüyor. İşte

Ben bir kılavuz olarak Set nesnesi kullanılarak aklınıza gelebilecek bazı alternatif çözüm şunlardır:

  1. Sen .add(), .clear() ve .delete() kaldırılan bir vekil nesne oluşturabilir, ancak diğer tüm erişim vekalet izin verdi sadece veri okuyan yöntemler. Bu, gerçek Set nesnesine erişimi gizleyeceğinden, doğrudan erişmenin ve diğer tüm yöntemlere proxy erişimi sağlamanın bir yolu olmayacaktır.

  2. Sen geçersiz olabilir hiçbir şey yapmadı ya modifikasyonunu önleyecek bir istisna attı yöntemlerle belirli bir Set örneğinde .add(), .clear() ve .delete(). Bu geçersiz kılma yöntemlerini geçersiz kılmadıysanız ve nesne üzerinde bir .freeze() yaptıysanız, bu yöntemler geri alınamaz. Set.prototype.add, Set nesnesini doğrudan atlamak için kullanabilirsiniz.

+0

teşekkürler. anlaşmak. Birincisi çok fazla iş gibi görünüyor ve biri 'Settan' kuruyor. ikincisi, '.add()' yi geçersiz kılar, daha kolay görünür, sessizce başarısız olur ya da hata verir. "hala bypass", benim için donma ana avantajı mutlak güvenlik değil, daha çok kendimi korumak, değişkenleri yazmak gibi. –