cc *_*ung 10 javascript dictionary object set
while Set是一个Object,Object.freeze()处理对象的属性,显然Map和Set不使用:例如
let m = new Map(); Object.freeze(m); m.set( 'key', 55); m.get( 'key' ) ==> 55
这是Chrome中的行为,我希望它是标准的.
我知道可以(有时)将Set或Map转换为普通Object,然后冻结对象.但随后在解冻和冻结版本之间进行密钥访问更改.
有趣的问题,但目前似乎不是一个Set或Map对象直接支持的功能.
以下是我可以考虑使用该Set对象作为指南的一些解决方法:
你可以创建一个删除代理对象.add(),.clear()和.delete(),但让刚刚读取数据的所有其他方法代理的访问.这将隐藏对实际Set对象的访问,因此无法直接访问它并提供对所有其他方法的代理访问.
您可以覆盖.add(),.clear()并.delete()在给定的Set实例上使用不执行任何操作的方法或引发会阻止修改的异常.如果您使这些覆盖方法不可配置,然后.freeze()对该对象执行了操作,则无法放回这些方法.可以Set.prototype.add直接在Set对象上使用但仍然绕过它.