我想知道是否有一种方法可以使用无缝不可变来转换对象,其中结果不可变的数组属性也是不可变的,目前
a = {hey: [1,2,3], ho: {hi:'there'}}
ia = Immutable(a)
ia // immutable
ia.hey // not immutable
ia.ho //immutable
我想要的是ia.hey,一个数组,也是不可变的,有人知道吗?
我想知道是否有一种方法可以使用无缝不可变来转换对象,其中结果不可变的数组属性也是不可变的,目前
a = {hey: [1,2,3], ho: {hi:'there'}}
ia = Immutable(a)
ia // immutable
ia.hey // not immutable
ia.ho //immutable
我想要的是ia.hey,一个数组,也是不可变的,有人知道吗?
除非我误解了您的问题,否则您可以通过在开发模式下使用无缝不可变来完成您的要求。看这里:
https://github.com/rtfeldman/seamless-immutable#performance
在开发版本中,对象被冻结。(请注意,Safari 迭代冻结对象的速度相对较慢。)开发构建还覆盖不受支持的方法(通常会改变底层数据结构的方法)以抛出有用的异常。
正如它所指出的,这会带来性能损失(这实际上非常重要,但在大多数情况下很可能不相关)。
看到这个 JSFiddle:https ://jsfiddle.net/pvqzh9yj/
var array = Immutable(["totally", "immutable", {hammer: "Can’t Touch This"}]);
array[1] = "I'm going to mutate you!";
array[2].hammer = "hm, surely I can mutate this nested object...";
for (var index in array) { console.log(array[index]); }