嵌套对象文字访问父级
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));
这实际上无法完成(如果不使用 call
或 apply
@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/.
我正在尝试访问对象文字图中的父项,但我不确定完成此操作的正确方法。这是一些伪代码。
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));
这实际上无法完成(如果不使用 call
或 apply
@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/.