很抱歉模糊的帖子标题,我无法用英文为这篇文章制定正确的名称。
例如我有这样一个对象:
var APP = {
a : 1,
b : function(){
return this.a;
}
}
通过这种方式,如果我拨打console.log ( APP.b() )
而不是this
将引用APP,结果将是1
。
但如何从子对象连接到APP? 例如:
var APP = {
a : 1,
b : function(){
return this.a;
},
c : {
c1: function(){
return APP.a;
}
}
}
console.log ( APP.c.c1() ) // 1
此示例有效,但直接指向APP是个坏主意。例如:
APP2 = APP;
APP = null;
console.log ( APP2.b() ); // 1
console.log ( APP2.c.c1() ); // APP is undefined
UPD:
我有半决定:
如果我声明属性c
就像一个方法:
c : function(){
var self = this;
return {
c1: function(){
return self.b();
},
c2: function(){}
}
}
它会起作用,但我应该调用方法而不是属性(括号太多):
console.log( APP2.c().c1() )
代替console.log( APP2.c.c1() )
答案 0 :(得分:3)
您可以创建工厂方法:
var APP = (function(){
var self;
return self = {
a : 1,
b : function(){
return this.a; // could be self, only differs in non-context use
},
c : {
c1: function(){
return self.a;
}
}
};
})();
APP2 = APP;
APP = null;
APP2.b(); // 1
APP2.c.c1(); // 1
答案 1 :(得分:2)
另外两种写作方式:
function App() {
var that = this;
this.a = 1;
this.b = function() {
return this.a();
};
this.c = {
c1: function() {
return that.a;
}
}
}
function App2() {
var app = {
a : 1,
b : function(){
return this.a;
},
c : {
c1: function(){
alert(app.a);
}
}
};
return app;
}
答案 2 :(得分:1)
你可以使用更多javascriptous方式来做到这一点:
var App = function() {
var that = this;
this.a = 1;
this.b = function(){
return this.a;
};
this.c = {
c1: function(){
return that.a;
}
}
}
var app1 = new App();
...