2014-02-14 2 views
2

Мне было интересно, может ли кто-нибудь осветить следующий вопрос.Как работают ссылки на объекты в JavaScript

У меня есть «тяжелый» объект с большим количеством функций и свойств:

var HeavyObject = { 
    property1:{} 
    property2:1, 
    propertyN:false, 
    func1:function(){} 
    func2:function(){} 
    .... 
    funcN:function(){} 
} 

Следующая У меня есть «легкий» объект:

var LightWheight = { 
    property1: { 
      sub_property:HeavyObject 
    }, 
    property2: { 
      sub: { 
       sub:{ 
        flag:true, 
        heavy:HeavyObject 
       } 
      } 
    } 
} 

Мой вопрос заключается в том, как тяжелый мой «облегченные» объект на самом деле, так как он имеет две ссылки на «HeavyObject»? Поддерживает ли он только два указателя на «HeavyObject» или ссылка делается по-другому?

Я понимаю, что это может зависеть от механизма JavaScript, но я хотел бы понять общую идею.

Любые разъяснения с пониманием.

+5

Они ссылки, то есть он не хранит весь «тяжелый предмет» внутри. –

+1

[смотрите здесь] [1] - это будет описано. [1]: http://stackoverflow.com/questions/6605640/javascript-by-reference-vs-by-value – i100

ответ

3

Поддерживает ли он только два указателя на «HeavyObject» или является ссылкой , сделанной по-другому?

Он сохраняет два указателя до HeavyObject.

Если вы хотите действительно протестировать его, измените любой из двух указателей и проверьте значения обоих указателей, на которые они указывают.

Ваш LightWheight станет тяжелым, если вы это сделаете,

var LightWheight = { 
    property1: { 
     sub_property: { 
      property1: {} 
      property2: 1, 
      propertyN: false, 
      func1: function() {} 
      func2: function() {}.... 
      funcN: function() {} 
     } 
    }, 
    property2: { 
     sub: { 
      sub: { 
       flag: true, 
       heavy: property1: {} 
       property2: 1, 
       propertyN: false, 
       func1: function() {} 
       func2: function() {}.... 
       funcN: function() {} 
      } 
     } 
    } } 
Смежные вопросы