对象中的对象中的Javascript`this`?
很抱歉,文章标题模糊,我无法用英语为这篇文章制定正确的名称 例如,我有这样一个对象:对象中的对象中的Javascript`this`?,javascript,object,this,Javascript,Object,This,很抱歉,文章标题模糊,我无法用英语为这篇文章制定正确的名称 例如,我有这样一个对象: var APP = { a : 1, b : function(){ return this.a; } } 这样,如果我调用console.log(APP.b())则将引用该应用程序,结果将为1 但如何从子对象连接到应用程序? 例如: 这个例子很有效,但直接指向应用程序是个坏主意。例如: APP2 = APP; APP = null; console.log ( APP
var APP = {
a : 1,
b : function(){
return this.a;
}
}
这样,如果我调用console.log(APP.b())
则将引用该应用程序,结果将为1
但如何从子对象连接到应用程序?
例如:
这个例子很有效,但直接指向应用程序是个坏主意。例如:
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())
您可以创建工厂方法:
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
其他两种书写方式:
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;
}
您可以使用更具Java脚本性的方法来实现这一点:
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();
...
我比较慢(但比较独立),你忘了提到,如何实例化一个应用程序:)@mykhal,没有理由不这样做。var self={…};return self
会更清晰,不是吗?@mykhal,如果这是你的个人喜好,那就去做吧,我觉得没有必要。好吧,从某种角度来看,这个作业只是作业表达式的副作用:)JSLint对这种结构进行了斥责;)具有var self={…}的版本;return self
更清晰,因为函数末尾的括号更少(犯语法错误的机会更少)
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();
...