如果你的意思,你想从property.propertyMethod
中访问myObject
的options
财产全球myObject的选项,有没有办法做到这一点,除了采取的事实的优点:这propertyMethod
是在myObject
变量,例如关闭:
var myObject = {
method: function(){
this.options = {};
},
property: {
propertyMethod: function(){
alert(myObject.options); // <=== Change is here
}
}
}
myObject.method();
myObject.property.propertyMethod();
...这通常不是一个好主意。 :-)相反,你可能想要以不同的方式设计你的对象。例如:
var myObject = (function() {
var obj = {
method: function(){
obj.options = {};
},
property: {
propertyMethod: function(){
alert(obj.options);
}
}
};
return obj;
})();
myObject.method();
myObject.property.propertyMethod();
这样,您正在使用函数调用的执行上下文。但是如果你打算这么做的话,也许可以采取下一步:
function makeObject() {
var obj = {
method: function(){
obj.options = {};
},
property: {
propertyMethod: function(){
alert(obj.options);
}
}
};
return obj;
}
var myObject = makeObject();
myObject.method();
myObject.property.propertyMethod();
......所以你可以做多个。甚至使一个真正的构造函数:
function MyObject() {
var obj = this;
obj.method = function(){
obj.options = {};
};
obj.property = {
propertyMethod: function(){
alert(obj.options);
}
};
}
var myObject = new MyObject();
myObject.method();
myObject.property.propertyMethod();
...虽然因为你没有充分利用的原型,也没有太多的理由,使之成为构造函数。
一般来说,你不能这样做。但是如果'myObject'是全局的,那么你总是可以在子对象中执行'myObject.options'。 – freakish 2013-02-13 16:16:20
@freakish:(稍微扩大)是*答案*。 – 2013-02-13 16:16:50
@ T.J.Crowder是的,其实我并不是100%确定的,所以我决定对它进行评论。 :) – freakish 2013-02-13 16:19:26