# 章序号/节序号/节/笔记序号
- Objective:解决什么问题
# 概念阐释
# 举例子
# 类比、比较与对比
# 问题
- [练习题](https://www.codecademy.com/courses/introduction-to-javascript/projects/meal-maker)
一家餐厅雇用了你来为他们的网站创建一个函数,允许他们每天早上设置今日特餐的菜品和价格。利用你对获取器`getter`和设置器`setter`的知识,确保任何使用新函数的人都可以生成今日特餐的菜品和价格,避免出现不必要的错误!
1. 创建菜单对象
1. 创建menu对象
2. 添加不想被改变的属性meal,string为空
3. 添加不想被改变的属性price,值为0
4. 测试添加了_的属性。(*如果乱写,返回结果也不会报错,所以在使用setter时要先用if条件确认数据类型*)
2. 添加setter方法
1. 设置`meal`方法和参数`mealToCheck`,如果数据类型为字符,则_meal属性可以等于新的参数`mealToCheck`
2. 设置`price`方法和参数`priceToCheck`,如果数据类型为数字,则_price属性可以等于新的参数`priceToCheck`
3. 调用`meal`和`price`方法,赋新的值,用`console`测试是否改变了属性`_meal` `_price`
3. 添加getter方法
1. 添加get方法,todaysSpecial
2. 确认属性都有值,则返回结果`Today's Special is ${this._meal} for ${this._price}.`,否则显示缺少属性值
4. 得到今天特餐
1. 用`console`得到`get`关键字中的结果
**挑战题**:
如果你想扩展你在这个项目上的学习,尝试添加一个餐品和价格的数组,随机设置并获取今日特价!
# 问题答案
1-4
```js
menu._meal = 8;
menu._price = 'Pizza';
console.log(menu);
//print
{_menu:'',price:'pizza',_meal:8}
```
```js
let menu = {
_meal:'',
_price:0,
//确认属性为挣钱的数据类型
set meal(mealToCheck) {
if(typeof mealToCheck === 'string'){
return this._meal = mealToCheck;
}
},
set price(priceToCheck) {
if(typeof priceToCheck === 'number'){
return this._price = priceToCheck;
}
},
//确认属性都有值,则返回结果,否则显示缺少属性值
get todaysSpecial() {
if(this._meal&& this._price){
return `Today's Special is ${this._meal} for ${this._price}.`
}else{
return 'Meal or price was not set correctly!'
}
}
};
//给属性设置(set)新的值
menu.meal = '油焖大虾';
menu.price = 25;
console.log(menu.todaysSpecial);
```
# 备注(经验集/错误集)
## summary
解决的怎么样?
## 参考资料