2016-12-12 1 views
1

다른 객체 집합을 포함하는 클래스를 생각해보십시오.클래스 함수의 영향을받는 클래스 변수를 동적으로 변경하십시오.

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를 만들 수있는 방법이 있습니까? 따라서 인덱스가있는 배열 대신에 이름이있는 집합 또는 객체를 사용할 수 있습니까? 이봐 당신이 시도 할 수

+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.addArap을 this.addMap = new Map()으로 변경 한 다음 this.addMap.set ("사과", this.apples) 등을 변경합니다. –

+0

아니, 나는 당신이'.apples' 속성을 전혀 갖지 않을 것이라는 의미였습니다. 'Food' 객체는'this.fruits = new Map ([[ "apples", 8], [ "orange", 6], [ "peach", 3]]) 및'add' 메소드는 두 개의 맵을 병합합니다. – Bergi

1

...

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