将对象从另一个不可变的Map分配给Map是否意味着深度克隆

Does assign an object to a Map from another immutable Map mean deep cloning?

本文关键字:Map 意味着 是否 深度 分配 另一个 不可变 对象      更新时间:2023-09-26

当我有两个不可变映射对象时:

const MapA = Immutable.fromJS({person: {name: 'Peter', age: 18}, parent: 'Sally'});
let MapB = Immutable.fromJS({prop1: 'testing'});
MapB = MapB.set('person', MapA.get('person'));

对象{名称:"Peter",年龄:18岁}在两个地图之间共享吗?或者有共享的方法吗?

ImmutableJS共享实例。在您的案例中,快照实例person对于MapA和MapB都是共享的。您可以通过在该实例上添加自定义的纯JS属性来验证这一点,并对MapA版本和MapB版本进行验证。你会发现他们有相同的价值观。

给你一把小提琴。。。https://jsfiddle.net/HaZardous/0Ls5gdht/.

这是供参考的fiddle代码-

var MapA = Immutable.fromJS({person: {name: 'Peter', age: 18}, parent: 'Sally'}),
MapB = Immutable.fromJS({prop1: 'testing'}),
person = MapA.get('person');
MapB = MapB.set('person', person);
person["nationality"] = "US";
console.log("Direct ref: " + person["nationality"]);
console.log("MapA ref: " + MapA.get('person')["nationality"]);
console.log("MapB ref: " + MapB.get('person')["nationality"]);

输出

Direct ref: US
MapA ref: US
MapB ref: US