我需要从对象文字中的子对象调用父属性

fox*_*net 23 javascript

我试图从子对象调用父属性

var parentObj = {  
   attr1:1,  
   attr2:2,   
   childObj:{  
      method1:function(){  
         return this.attr1 * this.attr2;  
      }  
   }  
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

Emm*_*ett 28

尝试parentObj直接引用:

var parentObj = {  
   attr1: 1,  
   attr2: 2,   
   childObj: {  
      method1: function () {  
         return parentObj.attr1 * parentObj.attr2;  
      }  
   }  
}
Run Code Online (Sandbox Code Playgroud)


Ray*_*nos 27

这可以通过封闭的力量来完成!

var Construct = function() {
    var self = this;    

    this.attr1 = 1;
    this.attr2 = 2;
    this.childObj = {
        method1: function () {
            return self.attr1 * self.attr2
        }
    }
}


var obj = new Construct();
Run Code Online (Sandbox Code Playgroud)


Mik*_*Mik 19

var parentObj = {  
    attr1:1,  
    attr2:2,   
    childObj:{  
       method1:function(){  
          return this.parent.attr1 * this.parent.attr2;  
       }  
    },  
    init:function(){
       this.childObj.parent = this;
       delete this.init;
       return this;
    }  
}.init();  
Run Code Online (Sandbox Code Playgroud)

  • 这只是清理,因此当您取回对象时,它没有仅在创建对象时使用的无用 init 函数。 (2认同)

Saf*_*ain 9

这是另一种不引用父对象名称的方法.

var parentObj = {
    attr1: 1,
    attr2: 2,
    get childObj() {
        var self = this;
        return {
            method1: function () {
                return self.attr1 * self.attr2;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

可以访问:

parentObj.childObj.method1(); // returns 2
Run Code Online (Sandbox Code Playgroud)


Ban*_*ago 6

引用父对象我的名字存在问题,因为如果您重命名它会破坏应用程序。这是一种更好的方法,在我广泛使用的方法中,您将父代作为参数传递给子代init方法:

var App = { 
  init: function(){    
    this.gallery.init(this);   
  },

  somevar : 'Some Var'
}

App.gallery = {
  init: function(parObj){
    this.parent = parObj;
    console.log( this.parent.somevar );  
  }

}

App.init();
Run Code Online (Sandbox Code Playgroud)