如何引用父对象的变量?

时间:2015-08-19 23:22:47

标签: javascript

如何在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?
};

3 个答案:

答案 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;