无缝不可变数组属性不是不可变的

时间:2016-12-07 12:44:36

标签: seamless-immutable

我想知道是否有一种使用无缝不可变转换对象的方法,其中结果不可变的数组属性也是不可变的,当前

a = {hey: [1,2,3], ho: {hi:'there'}}
ia = Immutable(a)
ia // immutable

ia.hey // not immutable
ia.ho //immutable

我想要的是ia.hey,一个数组,也是不变的,有谁知道怎么做?

1 个答案:

答案 0 :(得分:0)

除非我误解了您的问题,否则您可以通过在开发模式中使用无缝不可变来完成您所要求的内容。见这里:

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]); }