如果你的意思,你想從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