Ответ 1
Попробуйте напрямую ссылаться на parentObj
:
var parentObj = {
attr1: 1,
attr2: 2,
childObj: {
method1: function () {
return parentObj.attr1 * parentObj.attr2;
}
}
}
Я попытался вызвать из дочернего объекта родительский атрибут
var parentObj = {
attr1:1,
attr2:2,
childObj:{
method1:function(){
return this.attr1 * this.attr2;
}
}
}
но это не сработает.
Попробуйте напрямую ссылаться на parentObj
:
var parentObj = {
attr1: 1,
attr2: 2,
childObj: {
method1: function () {
return parentObj.attr1 * parentObj.attr2;
}
}
}
Это можно сделать с силой замыкания!
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();
Это другой подход, не ссылающийся на имя родительского объекта.
var parentObj = {
attr1: 1,
attr2: 2,
get childObj() {
var self = this;
return {
method1: function () {
return self.attr1 * self.attr2;
}
}
}
}
Доступ к нему можно выполнить так:
parentObj.childObj.method1(); // returns 2
Возникает проблема с ссылкой на родительское имя объекта, потому что оно прерывает приложение в случае его переименования. Вот более удобный подход, который я использую широко, где вы передаете родительский элемент в качестве аргумента методу 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();