这是我的代码:
var BoxUtility = function() {
var boxList = Array.prototype.pop.apply(arguments);
};
Object.defineProperties(BoxUtility, {
totalArea: {
value: function(){
var x = 0;
for(var i = 0, len = boxList.length; i <= len - 1; i++){
x = x + boxList[i].area;
};
return x;
}
}
});
我试图为我的代码实现此语法:
var boxArray = [box01, box02, box03];
框是对象,box01.area =&gt;盒子有区域属性
var newElement = new BoxUtility(boxArray);
alert(newElement.totalArea);
我想看到我预期的结果,但我认为boxList在另一个范围
如何在defineProperties
中访问它答案 0 :(得分:0)
您必须在构造函数中将值赋给this
的属性。
var BoxUtility = function() {
// this.boxList
this.boxList = Array.prototype.pop.apply(arguments);
};
// instance methods go on the prototype of the constructor
Object.defineProperties(BoxUtility.prototype, {
totalArea: {
// use get, instead of value, to execute this function when
// we access the property.
get: function(){
var x = 0;
// this.boxList
for(var i = 0, len = this.boxList.length; i <= len - 1; i++){
x = x + this.boxList[i].area;
};
return x;
}
}
});
var boxUtil = new BoxUtility([{area:123}, {area:456}]);
console.log(boxUtil.totalArea); // 579
变量范围总是在function
级别。所以你声明了一个只能在你的构造函数中使用的局部变量。但是每次调用构造函数时,都会得到一个新对象(this
)。您可以向this
添加属性,以便在原型的实例方法中访问这些属性。
答案 1 :(得分:0)
这是有效的
var BoxUtility = function() {
this.boxList = Array.prototype.pop.apply(arguments);
Object.defineProperties(this, {
totalArea: {
get: function(){
var x = 0;
for(var i = 0, len = this.boxList.length; i <= len - 1; i++){
x = x + this.boxList[i].area;
};
return x;
}
}
});};
var y = new BoxUtility(boxArray);
alert(y.totalArea)
答案 2 :(得分:0)
这是在构造函数中将数组作为参数传递并为公共访问声明函数原型的简单方法。
function BoxUtility(boxArray) {
this.boxArray = boxArray;
this.len = boxArray.length;
}
Color.prototype.getAverage = function () {
var sum = 0;
for(let i = 0;i<this.len;i++){
sum+=this.boxArray[i];
}
return parseInt(sum);
};
var red = new BoxUtility(boxArray);
alert(red.getAverage());