我正在尝试访问对象文字图中的父级,但我不确定实现此目的的正确方法。这是一些伪代码。
function MealPlan() {
this.sets = []
}
MealPlan.prototype = {
protein: {
getTotalSets: function() {
return this.sets.length;
}
}
};
我试图从getTotalSets函数中获取sets属性。
答案 0 :(得分:1)
这实际上无法完成(没有像@RichardMacarthy那样使用call
或apply
进行黑客攻击),因为您通过创建新的对象上下文来创建新的上下文(例如{{ 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/。