嵌套对象文字访问父级

Nested Object Literal Access Parent

我正在尝试访问对象文字图中的父项,但我不确定完成此操作的正确方法。这是一些伪代码。

function MealPlan() {
  this.sets = []
}

MealPlan.prototype = {
  protein: {
    getTotalSets: function() {
      return this.sets.length;
    }
  }
};

我正在尝试从 getTotalSets 函数中获取集合 属性。

根据您调用函数的位置,您可以这样做:使用 call 在函数中设置 this 的上下文。

function MealPlan() {
  this.sets = []
}

MealPlan.prototype = {
  protein: {
    getTotalSets: function() {
        console.log(this)
        this.sets.length;
    }
  }
};

var m = new MealPlan();

console.log(m.protein.getTotalSets.call(m));

这实际上无法完成(如果不使用 callapply @RichardMacarthy 展示的方式进行黑客攻击),因为您正在通过创建新的对象上下文(例如 protein) 在原型上。 prototype 用于向对象添加方法,而不是属性。

或者,您可以将 property 变成 method,这样您就可以保留对象的原始上下文。

function MealPlan() {
  this.sets = []
}

MealPlan.prototype = {
  protein: function() { 
     var self = this; 
     return { 
        getTotalSets: function() { return self.sets.length; },
        anotherMethod: function() { /* ... */ },
     }
   }
};

var mp = new MealPlan();
mp.protein().getTotalSets();

您可以通过几种不同的方式来解决这个问题...这里有一种方式可能最接近您的初衷:

function MealPlan() {
    var self = this;
    self.sets = [];

    self.protein = {
        getTotalSets: function() { return self.sets.length; },
        anotherMethod: function() { /* ... */ },
    }
}

var mp = new MealPlan();
mp.protein.getTotalSets();

您也可以将 protein 作为特征实现;看看 http://soft.vub.ac.be/~tvcutsem/traitsjs/.