class类的set和get方法
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <script type="text/javascript"> let year = prompt("请输入年份"); // 补充代码 class Caculate { constructor(){ this._age = 18; } get age () { return this._age; } set age (val){ this._age = val; } } let obj = new Caculate(); year.length === 4?obj.age = 2019 - year:obj.age = obj.age; document.write(obj.age) </script> </body> </html>
检查一下代码。
能结合代码说一下,2001年和201年分别的执行过程吗?对这里不熟悉
正在回答
同学你好,从当下来看,这样做确实需要花好多时间,但是从长远来看,是推荐这样做的。
因为当我们把老师当前小节讲解的知识弄懂之后,再继续往后学习,只会帮助我们原来的基础上慢慢积累更多的知识,也方便更好更快的去理解后面所学的知识,如果我们只考虑时间,对于目前所学的没有掌握透彻就着急往后学习,那么在学习后面的知识时候,会更加难以理解,那时候也会需要时间去理解理解新的知识同时也要去复习前面的知识。就像搭积木一样,一开始我们就把根基打好打牢固了,后面我们才能更快的搭出我们想要的形状,不然在你搭的过程中,还要返回去补根基,所以推荐同学在清楚自己掌握程度的前提下,再去考虑更高更快的学习效率
当然了,老师只是给同学提出一个建议, 同学可以结合自己的实际情况调整即可
如果帮助到了你, 欢迎采纳!
祝学习愉快~~
同学你好, get和set何时触发, 以及this._age是如何变化的, 可以参考如下测试理解
可以添加如下打印语句, 方便我们查看代码的执行效果
在我们访问属性的时候执行get方法。 例如,这个案例中, 我们访问age属性的时候,触发age函数
打印结果如下,可知程序执行obj.age这句代码的时候, 触发get age(){}这一部分的代码,返回示例属性_age的值18
在修改属性值的时候执行set方法, 例如:这修改age的值的时候
(1) 当输入的值, 符合年份格式, 执行obj.age = 2019 -year的时候, 这句代码的作用是修改obj.age的值,触发set age(val) {} 这部分代码, val是改变之后的值(这里是语言规定)赋值给实例属性_age, 此时_age的值就是修改后的值
(2)当输入的值,不符合年份格式, 执行obj.age = obj.age的时候, 这句代码, 是先获取到age的值,触发get方法, 然后将获取的值赋值给obj.age, 触发了set方法
打印结果如下
从这里的打印结果, 可以看出this._age是在触发set方法中执行了this._age= val的时候值发生了改变
综上, get和set的执行顺序就是, 当我们访问属性的时候就会执行对应的get, 当我们修改属性的时候就会执行对应的set
同学可以自己下去测试一下,结合代码效果去帮助自己更好的理解
这一块内容可能相对比较抽象一点,老师这里使用文字描述肯定没有视频讲解的生动形象易理解, 建议:同学可以先将视频中老师的讲解理解了,结合老师讲解的案例先多练习几次,做到可以不看视频和源码,根据自己的理解独立完成视频中的案例后,在编写练习题,这样对自己会更有帮助哦
如果帮助到了你, 欢迎采纳!
祝学习愉快~~~
同学你好, 首先, 同学的代码效果实现是可以的。 对于同学的疑惑解答如下:
当输入的年份是2001年的时候,year.length === 4 成立, 那么就执行 obj.age = 2019 - year 这句代码, 所以此时的obj.age值为 18
当输入的值为201的时候, year.length === 4 不成立, 那么就执行obj.age = obj.age, 获取的是默认值18, 所以最终打印的结果也是18哦
综上所述, 可以知道,同学写的这段代码, 当你输入正确年份格式的时候, 获得的结果是2019减去输入年份, 否则就是默认值18
另, 建议优化:可以不写具体年份2019,可以用Date获取实时年份, 让代码更加灵活哦
如果帮助到了你, 欢迎采纳!
祝学习愉快~~~
- 参与学习 人
- 提交作业 239 份
- 解答问题 10739 个
本阶段带你深入前端开发的肌理,通过ES6基础知识和前端主流高级框架的学习,助你快速构建企业级移动webAPP应用,进入职场的终极battle
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星