class类的set和get方法

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年分别的执行过程吗?对这里不熟悉

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,从当下来看,这样做确实需要花好多时间,但是从长远来看,是推荐这样做的。

因为当我们把老师当前小节讲解的知识弄懂之后,再继续往后学习,只会帮助我们原来的基础上慢慢积累更多的知识,也方便更好更快的去理解后面所学的知识,如果我们只考虑时间,对于目前所学的没有掌握透彻就着急往后学习,那么在学习后面的知识时候,会更加难以理解,那时候也会需要时间去理解理解新的知识同时也要去复习前面的知识。就像搭积木一样,一开始我们就把根基打好打牢固了,后面我们才能更快的搭出我们想要的形状,不然在你搭的过程中,还要返回去补根基,所以推荐同学在清楚自己掌握程度的前提下,再去考虑更高更快的学习效率

当然了,老师只是给同学提出一个建议, 同学可以结合自己的实际情况调整即可

如果帮助到了你, 欢迎采纳!

祝学习愉快~~

好帮手慕慕子 2019-10-18 19:02:24

同学你好, get和set何时触发, 以及this._age是如何变化的, 可以参考如下测试理解

  1. 可以添加如下打印语句, 方便我们查看代码的执行效果

    http://img1.sycdn.imooc.com//climg/5da995e209e2939606260380.jpg

  2. 在我们访问属性的时候执行get方法。 例如,这个案例中, 我们访问age属性的时候,触发age函数

    http://img1.sycdn.imooc.com//climg/5da9969809d599d309980565.jpg


    打印结果如下,可知程序执行obj.age这句代码的时候, 触发get age(){}这一部分的代码,返回示例属性_age的值18

    http://img1.sycdn.imooc.com//climg/5da996a30913c95e02830070.jpg 

  3. 在修改属性值的时候执行set方法, 例如:这修改age的值的时候

    http://img1.sycdn.imooc.com//climg/5da997bc099a76f810550625.jpg

    (1) 当输入的值, 符合年份格式, 执行obj.age = 2019 -year的时候, 这句代码的作用是修改obj.age的值,触发set age(val) {} 这部分代码, val是改变之后的值(这里是语言规定)赋值给实例属性_age, 此时_age的值就是修改后的值

    http://img1.sycdn.imooc.com//climg/5da997ed09760d1203400071.jpg

    (2)当输入的值,不符合年份格式, 执行obj.age = obj.age的时候, 这句代码, 是先获取到age的值,触发get方法, 然后将获取的值赋值给obj.age, 触发了set方法

    打印结果如下

    http://img1.sycdn.imooc.com//climg/5da999cc092ddf6a01850075.jpg

    从这里的打印结果, 可以看出this._age是在触发set方法中执行了this._age= val的时候值发生了改变

  4. 综上, get和set的执行顺序就是, 当我们访问属性的时候就会执行对应的get, 当我们修改属性的时候就会执行对应的set

同学可以自己下去测试一下,结合代码效果去帮助自己更好的理解

这一块内容可能相对比较抽象一点,老师这里使用文字描述肯定没有视频讲解的生动形象易理解, 建议:同学可以先将视频中老师的讲解理解了,结合老师讲解的案例先多练习几次,做到可以不看视频和源码,根据自己的理解独立完成视频中的案例后,在编写练习题,这样对自己会更有帮助哦

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~

  • 明白了,非常感谢,那这样感觉每天要花好多时间,真的是建议这样吗,有没有效率更高点的学习方法?
    2019-10-18 19:33:52
好帮手慕慕子 2019-10-18 13:36:11

同学你好, 首先, 同学的代码效果实现是可以的。 对于同学的疑惑解答如下:

  1. 当输入的年份是2001年的时候,year.length === 4 成立, 那么就执行 obj.age = 2019 - year 这句代码,  所以此时的obj.age值为 18

  2. 当输入的值为201的时候, year.length === 4 不成立, 那么就执行obj.age = obj.age, 获取的是默认值18, 所以最终打印的结果也是18哦

综上所述, 可以知道,同学写的这段代码, 当你输入正确年份格式的时候, 获得的结果是2019减去输入年份, 否则就是默认值18

另, 建议优化:可以不写具体年份2019,可以用Date获取实时年份, 让代码更加灵活哦

http://img1.sycdn.imooc.com//climg/5da93a3509c0de2a10650207.jpg

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~

  • 谢谢,我是想知道get、set如何执行的以及执行顺序,以及construct中的this_age如何变化的?
    2019-10-18 18:12:06
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师