如果您的意思是,您想从property.propertyMethod 中访问myObject 的options 属性,那么除了利用propertyMethod 是@987654325 的闭包这一事实之外,没有其他办法。 @变量,例如:
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();
...虽然你没有利用原型,所以没有太多理由让它成为构造函数。