1

如何获得家长选项?

我想访问全局 myObject 选项

var myObject = {    
  method: function(){
    this.options = {};
  },      
  property: {    
    propertyMethod: function(){
       alert(this.options);
    }     
  }    
}    
myObject.method();
myObject.property.propertyMethod();
4

2 回答 2

4

如果您的意思是,您想从内部访问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();

...尽管由于您没有利用原型,因此没有太多理由将其设为构造函数。

于 2013-02-13T16:18:37.067 回答
1

您可以使用call绑定thismyObject

myObject.property.propertyMethod.call(myObject);

于 2013-02-13T16:19:15.813 回答