我是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 有关吗?
答案 0 :(得分:2)
试试这个:
var bar = {
'name':'bob'
};
bar.comments = new Custom(bar);