2013-05-19 12 views
0

Предположим, у меня есть что-то вроде этого:Вложенные объекты, ссылающиеся друг на друга?

network = { 
    post: function(t) { 
    console.log(t); } 
    protocol: { 
    init: function() { 
     /* network.post("init") */ } } } 

комментируемого часть, как бы я позволяю функция network.protocol.init называть network.post через какой-то относительной ссылки? Как network.protocol может найти сетевые переменные?

Спасибо. :)

ответ

1

Это ограничение литерального синтаксиса объекта; вы просто не можете этого сделать.

Ваш лучший вариант - указать network через свойство на объекте и добавить его сразу после объявления объекта через синтаксис литерала объекта;

network = { 
    post: function(t) { 
    console.log(t); } 
    protocol: { 
    init: function() { 
     this.network.post("init") } } } 

network.protocol.network = network; 

... это работает, потому что наличие требуемого network собственности откладывается до исполнения самого init.

+0

Я думал, что это будет что-то вроде этого ... Я надеялся на что-то более чистое. Есть идеи? – DanRedux

+0

Это так же чисто, как и я, боюсь. Вы можете, конечно, установить весь «протокол» позже, а не просто «сетевое» свойство. Затем вы можете изменить «init» «protocol», чтобы принять «сетевой» экземпляр в качестве параметра ... Это может быть более чистым. – Matt

Смежные вопросы