2016-12-12 29 views
1

考慮一個包含一組其他對象的類。動態地改變哪些類變量受到你的類函數的影響

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

現在,我可以創建一個add函數。

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。所以,而不是一個具有索引的數組,我可以有一個名稱集或對象?

+0

對我來說,好像你在這裏混合兩種不同的結構。你的'食物'實際上是包含名稱和數量對的'食物'。你在正確的軌道上,雖然你使用對象而不是數組的想法似乎是一個更好的方法。 (在這裏,通過「更好的方法」,我的意思是唯一有意義的方法。) –

+0

雖然基於什麼,你可以用'for(var item in obj){...}'遍歷一個對象屬性你正在試圖做一個像數組一樣的數據結構會是一個更好的主意。主要是因爲如果你想添加任何其他屬性的食物,可能不是一個數字,你想*「添加」*。 –

回答

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

+0

謝謝你的迴應。我有一個後續問題。 如果我想使用地圖,我會將this.addArray更改爲this.addMap = new Map(),然後this.addMap.set(「apples」,this.apples)等等。是嗎? –

+0

Nah,我的意思是你根本沒有'.apples'屬性。一個'Food'對象只包含'this.fruits = new Map([[「蘋果」,8],[「orange」,6],[「桃子」,3]]);'和'add'方法會合並兩個地圖。 – Bergi

1

嘿,你可以試試這個也...

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