有几个疑问

来源:3-6 编程练习

Aurora_Meteor

2020-05-09 10:20:22

<!DOCTYPE html>

<html>


<head>

    <meta charset="utf-8">

    <title></title>

</head>


<body>

    <script type="text/javascript">

        let year = prompt("请输入年份");

        // 补充代码

        class Age {

            constructor() {

                this._age = 18;

            }


            get age() {

                return `我今年的年龄是:${this._age}`;

            }


            set age(val) {

                if (val < 1000 || val > 9999) {

                    this._age = 18;

                } else {

                    this._age = new Date().getFullYear() - val;

                }

            }

        }


        let a = new Age(year);

        document.write(a.age);

    </script>

</body>


</html>

1、实现效果不正确,输入什么都显示18,不知道怎么错了,输入年份不是四位用val < 1000 || val > 9999不能判断吗?

2、为什么输出的时候要用a.age才行,用a.age()就报错说a.age不是一个function,调用函数不应该加括号的吗?

3、为什么传参是在创建对象的时候直接在Age里面传year呢?这怎么能确定传入的参数就是给age的set方法的呢,如果Age里面还有其他有形参的方法,那不会冲突吗?

写回答

2回答

好帮手慕夭夭

2020-05-09

同学你好,问题解答如下:

1.因为属性默认就是18,代码中没有修改属性值,所以输入任何年份显示的都是18 。如下:

http://img.mukewang.com/climg/5eb6289709cb99d806830391.jpg

实例化的时候,并不会调用get方法,需要设置或者获取属性时,才会调用它们的set或者get方法。

http://img.mukewang.com/climg/5eb6287409e3b62607350679.jpg

例如下面输出的时候,是获取了age属性,那么就会自动调用get方法:

http://img.mukewang.com/climg/5eb6294109c0639008130650.jpg

2.age并不是一个方法(函数),而是一个属性,所以不能加括号调用。代码中是通过set和get方法对属性进行操作,也就是我们定义一个属性,调用属性时,取值就是调用了get方法,设置值就是调用set方法。这里重新理解一下。

3.这里并不是在实例化的时候传值哦,第一问中已经回复了,可以参考一下。

如果我的回答帮助到了你,欢迎采纳,祝学习愉快~

0
hurora_Meteor
h 应该改为 let a = new Age(); a.age=year; document.write(a.age); 对吗? let a = new Age();是实例化对象, a.age=year;才是调用age的set方法传入参数year来给_age属性赋值, document.write(a.age);里面的a.age是调用get方法执行里面的return语句。这样理解是否正确?
h020-05-09
共1条回复

好帮手慕夭夭

2020-05-09

同学你好,没错理解的全对。祝学习愉快 ~

0

0 学习 · 10739 问题

查看课程