如果您的意思是,您想从内部访问myObject
' 的options
属性property.propertyMethod
,那么除了利用变量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();
...尽管由于您没有利用原型,因此没有太多理由将其设为构造函数。