2014-12-19 27 views
1

在JavaScript中,如果我創建一個對象,這是我的理解是,這是本質上表示爲JSON,如果這個對象的父對象的句柄,父對一個手柄子對象,這是如何保存在內存中(它是一個指針?或重複的JSON)。JSON樹和內存分配

例如,如果你建造一個Person對象,像下面這樣,在那裏每個人都可能有多個孩子,也有其父的句柄。

var Person = function(json, parent) { 
    this.name = json.name; 
    this.parent = parent; 
    this.children = new Array(); 
    if(json.children) { 
    for(var i=0; i < json.children.length; i++) { 
     this.children.push(new Person (json. children[i], this)); 
    } 
} 

我的理解是,如果我改變一個人的特性,那麼這將反映在人,而且它的任何兒童的父母,所以這將表明實際的對象舉行一次在內存和JavaScript使用指針?我是否認爲這是正確的?

我擔心的是這種類型的結構是在內存中保存,因爲我可能會遇到的情況,我有這種類型的層次結構,它可以深入幾級幾千元昂貴。

回答

2

JSON是用於在純文本格式表示javascript對象的文本格式。

JavaScript對象本身在Javascript中沒有JSON的。它們是一些內部格式,這是JavaScript實現的一種內部格式,並且是良好的運行時性能和有效大小之間的平衡。當一個對象包含對Javascript中另一個對象的引用時,它不是該對象的副本。你可以把它看作是一個指向另一個對象的指針,它可能是實現內部的某種指針,但這取決於實現。關鍵是它像一個指針一樣工作。

一個簡單的JavaScript實驗表明,有該數據的一個副本(因此指針到一個單一數據集的使用)時,分配對象到多個變量:

var x = {counter: 2}; 
var y = x; 
x.counter = 10; 
console.log(x.counter); // 10 
console.log(y.counter); // 10 

JSON是在Javascript之後很久就發明了它作爲在不同進程或應用程序或計算機之間交換Javascript數據結構的手段。從那時起,它已經成爲許多不同語言使用的通用數據交換結構,而不僅僅是Javascript。你可以在這裏閱讀更多關於它的信息:http://www.json.org/

+0

非常感謝您的回答,這是非常有用的信息。 – Agent96 2014-12-19 11:02:36