Je dois appeler une propriété parent d'un objet enfant dans un objet littéral

J'ai essayé d'appeler de l'objet enfant un attribut parent

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

Mais ça ne marche pas.

Essayez de référencer parentObj directement:

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

Cela peut se faire avec le pouvoir des fermetures!

 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(); 
 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(); 

Il s'agit d'une autre approche sans référencer le nom de l'objet parent.

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

Peut être consulté comme suit:

 parentObj.childObj.method1(); // returns 2 

Il y a un problème avec le référencement de l'objet parent, mon nom car il casse l'application au cas où vous le renommez. Voici une approche plus agréable, que j'utilise de façon approfondie, où vous passez le parent comme argument de la méthode child 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();