Javascript 访问父属性

xav*_*vip 1 javascript

我如何获得家长选项?

我想访问全局 myObject 选项

var myObject = {    
  method: function(){
    this.options = {};
  },      
  property: {    
    propertyMethod: function(){
       alert(this.options);
    }     
  }    
}    
myObject.method();
myObject.property.propertyMethod();
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 5

如果你的意思是,你想从内部访问myObject的属性,那么除了利用变量的闭包这一事实之外,没有办法做到这一点,例如:optionsproperty.propertyMethodpropertyMethodmyObject

var myObject = {    
  method: function(){
    this.options = {};
  },      
  property: {    
    propertyMethod: function(){
       alert(myObject.options); // <=== Change is here
    }     
  }    
}    
myObject.method();
myObject.property.propertyMethod();
Run Code Online (Sandbox Code Playgroud)

...这通常不是一个好主意。:-) 相反,您可能想要以不同的方式设计您的对象。例如:

var myObject = (function() {
  var obj = {
    method: function(){
      obj.options = {};
    },      
    property: {    
      propertyMethod: function(){
         alert(obj.options);
      }     
    }    
  };
  return obj;
})();
myObject.method();
myObject.property.propertyMethod();
Run Code Online (Sandbox Code Playgroud)

这样,您就可以使用函数调用的执行上下文。但如果您打算这样做,也许可以进行下一步:

function makeObject() {
  var obj = {
    method: function(){
      obj.options = {};
    },      
    property: {    
      propertyMethod: function(){
         alert(obj.options);
      }     
    }    
  };
  return obj;
}
var myObject = makeObject();
myObject.method();
myObject.property.propertyMethod();
Run Code Online (Sandbox Code Playgroud)

...这样你就可以制作多个。或者甚至创建一个真正的构造函数:

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();
Run Code Online (Sandbox Code Playgroud)

...虽然由于您没有利用原型,但没有太多理由将其设为构造函数。