将对象文字存储在不可变的有效模式中......?

时间:2016-03-16 20:32:42

标签: immutability immutable.js

所以我有以下形式的Immutable.js:

let o = immutable.Map({a: {b: 1}})

所以我的问题是,它是否有效:

o.get('a').b = 2

将仅返回值集,但不返回新的引用...:/

或建议修改Immutable地图内对象文字内部状态的其他模式?

如果有人可以扩展immuatble.js与对象文字和建议混合的模式(如果有的话),我将不胜感激......

一如既往,

肖恩。

1 个答案:

答案 0 :(得分:1)

你认为内部对象文字是可变的是正确的。您可以将其测试为:

var o = immutable.Map({a: {b: 1}})
o.get('a').b = 2;
// b will now be mutated in o;

如果你想创建一个完全不可变的对象,可以使用Immutable提供的fromJS方法,它将进行深度转换,或者将a的值设置为Map。

编辑添加:关于适当的模式,我建议完全不可变,因为它维护任何内部对象/数组也是不可变的契约。