Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将对象从另一个不可变映射分配给映射是否意味着深度克隆?_Javascript_Immutable.js - Fatal编程技术网

Javascript 将对象从另一个不可变映射分配给映射是否意味着深度克隆?

Javascript 将对象从另一个不可变映射分配给映射是否意味着深度克隆?,javascript,immutable.js,Javascript,Immutable.js,当我有两个不可变的贴图对象时: 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}是在两个映射之间共享的还是有方法共享的?Immutable

当我有两个不可变的贴图对象时:

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版本进行验证。您会发现它们具有相同的值

给你一把小提琴

这是供参考的小提琴代码-

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