2017-08-25 275 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]結果。

相關問題