나는 왜 내 요리를 course [courseName]에 addDishToCourse 메서드로 푸시 할 수 없는지를 알아낼 것 같다. courseName은 배열이므로 어떤 문제도 있어서는 안된다. (실제로는 사실이 아니다.> <) . 도와주세요? JS의 .push에서 코드가 깨졌습니다.
const menu = {
_courses : {
_appetizers : [],
_mains : [],
_desserts : []
},
>> set appetizers(appetizerIn) {
},
get appetizers() {
},
set mains(mainIn) {
},
get mains() {
},
set desserts(dessertIn) {
},
get desserts() {
},
get courses() {
return {
appetizers : this._courses.appetizers,
mains : this._courses.mains,
desserts : this._courses.desserts
}
},
//Below is where my code breaks with the .push
addDishToCourse(courseName, dishName, dishPrice) {
let dish = {
name : dishName,
price : dishPrice
};
this._courses[courseName].push(dish);
},
getRandomDishFromCourse(courseName) {
const dishes = this._courses[courseName];
const randomIndex = Math.floor(Math.random() * this.dishes.length);
return dishes[randomIndex];
},
generateRandomMeal() {
const appetizer = this.getRandomDishFromCourse('appetizers');
const main = this.getRandomDishFromCourse('mains');
const dessert = this.getRandomDishFromCourse('desserts');
//const totalPrice = appetizers.price + mains.price + desserts.price;
return `Your appetizer is ${appetizers.name} followed by the main meal, which will be ${mains.name}, and finally you will have ${desserts.name} for dessert.`;// Your bill will be of ${totalPrice}.`;
}
};
menu.addDishToCourse('appetizers', 'Caesar Salad', 3.75);
menu.addDishToCourse('appetizers', 'Srimp Cocktail', 6.50);
menu.addDishToCourse('appetizers', 'Escargots Gratines', 4.50);
menu.addDishToCourse('mains', '16oz Ribeye', 38);
menu.addDishToCourse('mains', 'Smoked Salmon', 18);
menu.addDishToCourse('mains', 'Grilled Chicken Breast', 19);
menu.addDishToCourse('desserts', 'Chocolate Lava Cake', 3.50);
menu.addDishToCourse('desserts', 'Tiramisu', 4);
menu.addDishToCourse('desserts', 'Kiev Cake', 6.50);
let meal = menu.generateRandomMeal();
console.log(meal);
는 지금은 .push 해결하기 위해 if 문을 사용했지만, 그건 그냥 다른 곳에서 코드를 끊었다. 그렇지 않으면, 나는 잠재적으로 setter 메소드를 사용한다는 것을 알고 있지만, 그 중 하나를 다루는 방법에 대해서는 너무 확신하지 못한다. addDishToCourse를 설정하겠습니까?
나는 (초현실적 인 코드^_ ^에서 알 수 있듯이) 초보자이므로 어떤 도움이라도 대단히 감사하겠습니다!
' "_something"! == "something"' – Dummy
이 이슈와 관련이 없지만 IMHO getter 함수는 배열의 복사본을 반환해야하며, setter는 마찬가지로 전달 된 배열을 로컬 배열에 복사해야합니다 . 그렇지 않으면 내부 데이터에 대한 참조를 얻는이 클래스의 클라이언트가 _ place_에서 수정할 수 있고 객체의 캡슐화를 해제 할 수 있습니다. – Alnitak
감사합니다 @Alnitak! 일단 내가 더 편안하게되면 세터/게터를 확실히 수정할 것입니다. 나는 그런 생각을 한 적이 없으며 미래를 위해 유용 할 것입니다^_^ – ChronicLogic