2016-01-12 37 views
1

我是JavaScript新手,正在努力解决以下问题。在javascript中引用父对象

让我们来思考这种情况。

首先,有一个这样的对象。

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

但是,由于一些原因,我们只有一个名为“富”,这是bar.comments完全相同的变量。

二,因为我们需要参考对象bar,所以必须在foo中有方法,名为callParent。如果我们满足所有这些条件,我们可以使用foo.callParent()来获得对象bar

要像上面那样实现,首先我定义一个构造函数名称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过分复杂的事情。 –