从另一个不可变 Map 将对象分配给 Map 是否意味着深度克隆?
Does assign an object to a Map from another immutable Map mean deep cloning?
当我有两个不可变映射对象时:
const MapA = Immutable.fromJS({person: {name: 'Peter', age: 18}, parent: 'Sally'});
let MapB = Immutable.fromJS({prop1: 'testing'});
MapB = MapB.set('person', MapA.get('person'));
对象{name: 'Peter', age: 18} 是否在两个地图之间共享,或者有办法共享吗?
ImmutableJS 共享实例。在您的例子中,快照实例 person
为 MapA 和 MapB 共享。您可以通过在此实例上添加自定义纯 JS 属性来验证这一点,并针对 MapA 版本和 MapB 版本进行验证。你会发现它们有相同的值。
这是给你的 fiddle...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
当我有两个不可变映射对象时:
const MapA = Immutable.fromJS({person: {name: 'Peter', age: 18}, parent: 'Sally'});
let MapB = Immutable.fromJS({prop1: 'testing'});
MapB = MapB.set('person', MapA.get('person'));
对象{name: 'Peter', age: 18} 是否在两个地图之间共享,或者有办法共享吗?
ImmutableJS 共享实例。在您的例子中,快照实例 person
为 MapA 和 MapB 共享。您可以通过在此实例上添加自定义纯 JS 属性来验证这一点,并针对 MapA 版本和 MapB 版本进行验证。你会发现它们有相同的值。
这是给你的 fiddle...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