Если вы имеете в виду, вы хотите получить доступ к myObject
«s 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();
... хотя, так как вы не используя прототип, нет особых причин, чтобы сделать это функция конструктора.
Как правило, вы не можете сделать это. Но если 'myObject' является глобальным, тогда вы всегда можете выполнять' myObject.options' в дочернем объекте. – freakish
@freakish: Это (слегка расширенное) является * ответом *. –
@ T.J.Crowder Да, на самом деле я не был на 100% уверен, поэтому я решил сделать это замечанием. :) – freakish