有几个疑问
来源: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回答
同学你好,问题解答如下:
1.因为属性默认就是18,代码中没有修改属性值,所以输入任何年份显示的都是18 。如下:

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

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

2.age并不是一个方法(函数),而是一个属性,所以不能加括号调用。代码中是通过set和get方法对属性进行操作,也就是我们定义一个属性,调用属性时,取值就是调用了get方法,设置值就是调用set方法。这里重新理解一下。
3.这里并不是在实例化的时候传值哦,第一问中已经回复了,可以参考一下。
如果我的回答帮助到了你,欢迎采纳,祝学习愉快~
好帮手慕夭夭
2020-05-09
同学你好,没错理解的全对。祝学习愉快 ~