Javascript 为什么返回的数据相同?
Javascript 为什么返回的数据相同?,javascript,json,node.js,Javascript,Json,Node.js,let statList={ 标题:{ x:“中心” }, xAxis:{ 类型:“类别”, axisTick:{ alignWithLabel:true } }, 亚克斯:{ 类型:“值” } }; 设statObj={}; statObj.chatObj=Object.create(statList); statObj.carObj=Object.create(statList); statObj.saObj=Object.create(statList); statObj.chatObj.
let statList={
标题:{
x:“中心”
},
xAxis:{
类型:“类别”,
axisTick:{
alignWithLabel:true
}
},
亚克斯:{
类型:“值”
}
};
设statObj={};
statObj.chatObj=Object.create(statList);
statObj.carObj=Object.create(statList);
statObj.saObj=Object.create(statList);
statObj.chatObj.xAxis.data=[1,2,3];
statObj.carObj.xAxis.data=[4,5,6];
statObj.saObj.xAxis.data=[7,8,9];
log(statObj)
通常我会使用以下技巧来解决这个问题
statObj.chatObj = JSON.parse(JSON.stringify(statList));
我不是说这是一个好的实践,但通过这种方式,我可以确保创建的对象在内存中有自己的地址
Object.assign()
的问题是它不能使用嵌套属性,不管怎样,创建的对象是可变的。在设置statObj.chatObj.xAxis
时,在chatObj
上找不到xAxis
,因此在原型链上搜索xAxis
(statList
是chatObj
的原型),我们可以在那里找到它。到目前为止,我们已经完成了部分statObj.chatObj.xAxis
,接下来我们将创建一个.data
键,该键将在statList.xAxis
上创建。使用statObj.carObj.xAxis.data
和statObj.saObj.xAxis.data
指定由statObj.ch设置的内容atObj.xAxis.data
在statList.xAxis.data
上,这就是为什么我们得到statObj.XX.xAxis.data的结果
最后一个设置值,即[7,8,9]
试试这个:警报((statObj.chatObj==statList));这将告诉您是否创建了statList的副本,实际上它只是对statList的引用,这将解释为什么它们是相同的。这也是我一直在做的。由于堆栈溢出,我只知道还有其他方法。实际上,这个问题是我第一次看到“Object.create”!