0

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

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

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

我想要的是ia.hey,一个数组,也是不可变的,有人知道吗?

4

1 回答 1

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]); }
于 2017-02-12T00:29:46.617 回答