gpt4 book ai didi

javascript - 有没有办法卡住 ES6 map ?

转载 作者:可可西里 更新时间:2023-11-01 01:24:39 25 4
gpt4 key购买 nike

我正在寻找一种卡住原生 ES6 map 的方法。

Object.freezeObject.seal似乎不起作用:

let myMap = new Map([["key1", "value1"]]);
// Map { 'key1' => 'value1' }

Object.freeze(myMap);
Object.seal(myMap);

myMap.set("key2", "value2");
// Map { 'key1' => 'value1', 'key2' => 'value2' }

这是预期的行为,因为卡住卡住了 objectsmaps 的属性不是 objects 或者这可能是一个错误/尚未实现?

是的,我知道,我可能应该使用 Immutable.js ,但是有什么方法可以用原生 ES6 map 做到这一点吗?

最佳答案

没有,你可以写一个包装器来做到这一点。 Object.freeze 锁定对象的属性,但是虽然 Map 实例是对象,但它们存储的值不是属性,因此卡住对它们没有影响,就像任何其他类一样隐藏了内部状态。

在支持扩展内置函数(不是 Babel)的真实 ES6 环境中,您可以这样做:

class FreezableMap extends Map {
set(...args){
if (Object.isFrozen(this)) return this;

return super.set(...args);
}
delete(...args){
if (Object.isFrozen(this)) return false;

return super.delete(...args);
}
clear(){
if (Object.isFrozen(this)) return;

return super.clear();
}
}

如果您需要在 ES5 环境中工作,您可以轻松地为 Map 创建一个包装类,而不是扩展 Map 类。

关于javascript - 有没有办法卡住 ES6 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35747325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com