如何在gar
内和bar
内引用foo
的值?
var foo =
{
gar : function() { },
bar :
{
field1 : gar // how do I reference gar here?
// should it be foo.gar?
// or just this.gar?
// or just gar?
// all of them are undefined
},
har : gar // and what about here?
};
答案 0 :(得分:2)
您可以实例化匿名构造函数而不是对象初始值设定项:
var foo = new function() {
this.gar = function() { };
this.bar = { field1: this.gar };
this.har = this.gar;
};
答案 1 :(得分:2)
您无法直接执行此操作,JavaScript中没有对父对象的显式引用。 另一个选择是将对象行为和属性包装在一个函数中,这样你就可以保持闭包并且不需要构造函数:
var foo = function(){
var gar = function(){console.log('gar')};
return {
gar: gar,
bar: {
field1: gar
},
har: gar
};
}();
<强>更新强>
示例在严格模式下会出现问题,请阅读上面的评论:
var foo = function(){
this.gar = function(){console.log('gar')};
return {
gar: this.gar,
bar: {
field1: this.gar
},
har: this.gar
};
}();
答案 2 :(得分:0)
您可以在初始创建后扩展对象;
var foo = {
gar: function() { },
bar: { }
}
foo.bar.field1 = foo.gar;
foo.har = foo.gar;