2017-08-25 157 views
2

为什么返回的数据相同?

let statList = { 
 
    title: { 
 
    x: "center" 
 
    }, 
 
    xAxis: { 
 
    type: "category", 
 
    axisTick: { 
 
     alignWithLabel: true 
 
    } 
 
    }, 
 
    yAxis: { 
 
    type: "value" 
 
    } 
 
}; 
 

 
let 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]; 
 

 
console.log(statObj)

为什么返回statObj.XX.xAxis.data一样吗?

为什么当我用console.log(JSON.stringify(statObj))时,结果是{"chatObj":{},"carObj":{},"saObj":{}}

+0

试试这个:alert((statObj.chatObj === statList));这会告诉你是否创建了statList的副本,或者实际上它只是对statList的引用,这可以解释为什么它们是相同的。 – SPlatten

回答

1

通常我用下面的技巧

statObj.chatObj = JSON.parse(JSON.stringify(statList)); 

我不说这是一个很好的做法解决这个问题,但在这方面,我都会确保创建的对象具有它在存储自己的ADRESS。

Object.assign()的问题是,它不与嵌套性质的工作,反正创建的对象是可变的。

+0

这就是我一直都这样做的。我只知道有其他方式,因为堆栈溢出。实际上,这个问题是我第一次看到'Object.create'! – diopside

2

在设置statObj.chatObj.xAxisxAxis上没有chatObj发现,所以xAxis搜索的原型链(statListchatObj原型),在那里我们可以找到它。到目前为止,我们已完成部分statObj.chatObj.xAxis,接下来我们将创建一个.data密钥,该密钥将在statList.xAxis上创建。既statObj.carObj.xAxis.datastatObj.saObj.xAxis.data oberride什么是对statList.xAxis.data设置由statObj.chatObj.xAxis.data分配,这就是为什么我们有statObj.XX.xAxis.data最后设置值是[7, 8, 9]结果。

相关问题