I need to call a parent property from child object in an object literal

后端 未结 5 737
时光取名叫无心
时光取名叫无心 2020-12-02 23:16

I tried to call from child object a parent attribute

var parentObj = {  
   attr1:1,  
   attr2:2,   
   childObj:{  
      method1:function(){  
         r         


        
相关标签:
5条回答
  • 2020-12-02 23:51

    Try referencing parentObj directly:

    var parentObj = {  
       attr1: 1,  
       attr2: 2,   
       childObj: {  
          method1: function () {  
             return parentObj.attr1 * parentObj.attr2;  
          }  
       }  
    }
    
    0 讨论(0)
  • 2020-12-02 23:53

    There is a problem with referencing parent object my name because it breaks the app in case you rename it. Here is nicer approach, which I use extensively, where you pass the parent as an argument to the child init method:

    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();
    
    0 讨论(0)
  • 2020-12-03 00:02
    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();  
    
    0 讨论(0)
  • 2020-12-03 00:05

    This can be done with the power of closures!

    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();
    
    0 讨论(0)
  • 2020-12-03 00:05

    This is an another approach without referencing the parent object's name.

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

    Can be accessed as:

    parentObj.childObj.method1(); // returns 2
    
    0 讨论(0)
提交回复
热议问题