我尝试从子对象调用父属性
var parentObj = {
attr1:1,
attr2:2,
childObj:{
method1:function(){
return this.attr1 * this.attr2;
}
}
}
但它不起作用。
答案 0 :(得分:26)
直接尝试引用parentObj
:
var parentObj = {
attr1: 1,
attr2: 2,
childObj: {
method1: function () {
return parentObj.attr1 * parentObj.attr2;
}
}
}
答案 1 :(得分:23)
这可以通过封闭的力量来完成!
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();
答案 2 :(得分:17)
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();
答案 3 :(得分:8)
这是另一种不引用父对象名称的方法。
onAttach()
可以访问:
var parentObj = {
attr1: 1,
attr2: 2,
get childObj() {
var self = this;
return {
method1: function () {
return self.attr1 * self.attr2;
}
}
}
}
答案 4 :(得分:4)
引用父对象我的名字时出现问题,因为它会在重命名时破坏应用程序。这是一个更好的方法,我广泛使用,您将父作为参数传递给子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();