2014-12-19 3 views
1

В JavaScript, если я создаю объект, я понимаю, что это по существу представлено как JSON, и если у этого объекта есть дескриптор его родительского объекта, а у родителя есть дескриптор на дочерний объект, как это хранится в памяти (это указатель? Или дублирование JSON).JSON Tree & Memory Allocation

Например, если я создаю объект 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