2016-01-12 5 views
1

Я новичок в javascript и борется с проблемой ниже.ссылка родительский объект в javascript

Давайте подумаем об этой ситуации.

Во-первых, есть такой объект.

var bar = { 
      'name' : 'bob', 
      'comments' : [] 
      } 

Однако из-за некоторых причин, у нас есть только одна переменная, с именем «Foo», и это в точности то же самое с bar.comments.

Во-вторых, поскольку мы должны ссылаться на объект bar, должен существовать метод в foo, названный callParent. Если мы удовлетворим всем этим условиям, мы можем получить объект bar с использованием foo.callParent().

Для реализации, как и прежде, я определяю имя конструктора Custom.

function Custom(param){ 
    this.callParent = function(){ 
     console.log(param); 
    } 
} 

, а затем, чтобы использовать экземпляр Custom как массив, наследование Array.

Custom.prototype = Array.prototype; 

после этого, я хочу определить объект bar как показано ниже.

var bar = { 
      'name':'bob', 
      'comments':new Custom(this) 
      } 

В этой реализации, потому что я думал, что this означает bar сам, я ожидал, что результат будет foo.callParent()bar но это было window. Я думаю, это потому, что в контексте звонка foo.callParent(), this больше не означает bar.

И наконец, я решаю эту проблему следующим образом.

var bar = { 
      'name':'bob', 
      'comments':undefined, 
      'init':function(){ 
         this.comments = new Custom(this); 
         return this; 
      } 
}.init(); 

Qeustion: Есть ли способ, чтобы решить эту ситуацию, не прибегая к помощи другого метода, как bar.init? Я хочу решить это только с изменениями конструктора Custom! Связано ли это с IIFE?

+0

как это? 'var bar = { 'name': 'bob', 'comments': new Custom (bar) }' – Lewis

+1

@tresden, который не будет работать - это пройдет 'undefined'. –

+0

@ DanielA.White О, мой плохой. Это должно было быть похоже на ваш ответ. – Lewis

ответ

2

Попробуйте это:

var bar = { 
     'name':'bob' 
     }; 
bar.comments = new Custom(bar); 
+0

Спасибо, но я хочу решить его с помощью 'this', который используется как параметр' Custom'! : D –

+0

@ HT.Cha, который слишком усложняет ситуацию. –

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