嵌套的Object Literal Access Parent

时间:2015-04-07 12:10:50

标签: javascript object-literal

我正在尝试访问对象文字图中的父级,但我不确定实现此目的的正确方法。这是一些伪代码。

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

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

我试图从getTotalSets函数中获取sets属性。

3 个答案:

答案 0 :(得分:1)

这实际上无法完成(没有像@RichardMacarthy那样使用callapply进行黑客攻击),因为您通过创建新的对象上下文来创建新的上下文(例如{{ 1}})在原型上。 protein用于向对象添加方法,而不是属性。

或者,您可以将prototype转换为property,这样您就可以保留对象的原始上下文。

method

答案 1 :(得分:0)

根据您调用该函数的位置,您可以这样做:使用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));

答案 2 :(得分:0)

有几种不同的方法可以解决这个问题......这是一种可能与您最初的意图最接近的方式:

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/