javascript

时间:2016-01-12 16:23:30

标签: javascript constructor prototype this iife

我是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类似数组的实例,继承数组。

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 有关吗?

1 个答案:

答案 0 :(得分:2)

试试这个:

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