Javascript 内部对象如何引用其父对象';申报时有什么东西?

Javascript 内部对象如何引用其父对象';申报时有什么东西?,javascript,scope,Javascript,Scope,JSFiddle: 有没有办法让这一切顺利进行 我可以将方法声明移动到methods对象内部,但这需要对我正在处理的实际代码进行重构,我只想让它正常工作) 我不认为这正是你想要的,但我发现你可以通过使用 例如: var测试={ someProperty:true, 获取某些属性引用(){ 归还此.someProperty; } }; log(test.somePropertyReference)如前所述,无法从对象文字中的嵌套对象引用父属性。 但我会建议一些模块化模式的替代方案。 以下方法使用

JSFiddle:

有没有办法让这一切顺利进行


我可以将方法声明移动到
methods
对象内部,但这需要对我正在处理的实际代码进行重构,我只想让它正常工作)

我不认为这正是你想要的,但我发现你可以通过使用

例如:

var测试={
someProperty:true,
获取某些属性引用(){
归还此.someProperty;
}
};

log(test.somePropertyReference)如前所述,无法从对象文字中的嵌套对象引用父属性。
但我会建议一些模块化模式的替代方案。 以下方法使用单个公共方法生成并返回对象
someObject

标记为私有对象的“main”对象,该对象不能被修改,也不能被其他人访问。(现在很安全)。
方法“隐式”返回列表(对象)“main”对象的所有方法中

var someObject = (function(){

  var privateObj = {
      method1: function() {
        console.log("method 1");
      },
      method2: function() {
        console.log("method 2");
      },
      method3: function() {
        console.log("method 3");
      },
      getMethods : function(){
        var self = this;
        return {
            one: self.method1,
            two: self.method2,
            three: self.method3
        };
      }
  };

  return {
      run: function(str) {
          console.log("running");
          privateObj.getMethods()[str]();
      }
  };

}());

您可以简单地重新构造它,并使用“bind”将对象构造函数中的“this”绑定到应该引用它的函数

函数someObject(){
该方法={
方法1:函数(){
console.log(this);
控制台日志(“方法1”);
},
方法2:this.method2.bind(this)
}
}
someObject.prototype.run=函数(str){
控制台日志(“运行”);
方法[str]();
}
someObject.prototype.method2=函数(){
console.log(this);
控制台日志(“方法2”);
}
var a=新的someObject();
a、 运行(“方法1”);

a、 运行(“方法2”)无法从对象初始值设定项内部引用对象的属性。在对初始值设定项求值时,对象实际上并不存在。@Mike'Pomax'Kamermans-我有一个对象,它有一系列不同的“main”方法。我需要将它们放入一个key:values(key:functions)列表中,这样就可以对它们进行迭代,以便从列表中进行选择?这听起来不像是合理的责任委托,因此在本例中,我们仍然在考虑您要做什么,而不是您已经做出了哪些代码决策。“一个对象”做什么,“主要”方法做什么,为什么你需要在列表中使用它们,为什么你需要迭代它们?只要你支持IE9+;即使使用替代方法(无语法更改)定义getter和setter,也无法在早期浏览器中使用backport(polyfill)getter和setter。
var someObject = (function(){

  var privateObj = {
      method1: function() {
        console.log("method 1");
      },
      method2: function() {
        console.log("method 2");
      },
      method3: function() {
        console.log("method 3");
      },
      getMethods : function(){
        var self = this;
        return {
            one: self.method1,
            two: self.method2,
            three: self.method3
        };
      }
  };

  return {
      run: function(str) {
          console.log("running");
          privateObj.getMethods()[str]();
      }
  };

}());