动态更改类函数影响的类变量

时间:2016-12-12 04:36:41

标签: javascript class object

考虑一个包含一组其他对象的类。

function Food= (){
 this.apples = 8;
 this.orange = 6;
 this.peach = 3;
}

现在,我可以创建一个添加功能。

Food.prototype.add(food){
 this.apple += food.apple;
 this.orange+=food.orange;
 this.peach+=food.peach;
}

然而,如果我想动态地想要在食物中添加另一种东西,food.prototype.add还会添加什么呢?

第一个问题是,是否有一种简单的方法可以在类中添加所有对象?

第二个问题是:我本可以编写如下代码。

function Food = (){
this.apples = 8;
this.orange = 6;
this.peach = 3;
this.addArray = [];
this.addArray.push(this.apples);
this.addArray.push(this.orange);
this.addArray.push(this.peach);
} 

Food.prototype.add(food){
 for (i=0, i<this.addArray.length, i++){
  this.addArray[i]+=food.addArray[i];
 }
}

这样,如果我想将escargot添加到我想要添加的内容中,我只需将其添加到addArray即可。

有没有办法可以制作类似的addSet或addObject。因此,不是拥有带索引的数组,而是可以使用带有名称的集合或对象?

2 个答案:

答案 0 :(得分:1)

嘿,你也可以尝试一下......

Food.prototype.add(food){
 for(var i in food)
 {
    if(this[i] != undefined)
    {
       this[i] += food[i];
    }
 }
}

答案 1 :(得分:1)

我认为你在寻找的是

function Food() {
    this.apples = 8;
    this.orange = 6;
    this.peach = 3;
    this.addArray = ["apples", "orange", "peach"];
} 

Food.prototype.add = function(food) {
    for (var i=0, i<this.addArray.length, i++) {
        this[this.addArray[i]] += food[this.addArray[i]];
    }
};

但是,如果你动态添加任意水果,我怀疑这是一个好主意。作为扩展课程的简单方法,是的,但除此之外,您最好使用正确的Map