关于getter和setter还是不懂
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title> </head> <body> <script> class Person { constructor(name, age) { this.name = name this.age = age } set name(name) { this._name = name } get name() { return `我的名字叫${this._name}` } // 加一个成员方法 sayName() { console.log(this.name) } } var p = new Person('小张', 25) p.sayName() p.name = '小明' p.sayName() </script> </body> </html>
这里set 和 get起到的作用是什么?修改实例化对象的name属性吗?
为什么在控制台打印 p.name的结果是“我的名字叫小明”,而不是“小张”。得到的结果为什么不是constructor里对实例化对象this.name=name,然后传入“小张”参数?
为什么实例化后的对象p的属性_name:"小明",而name属性变成不可枚举属相为什么会变成不可枚举属性?,name:“我的名字叫小明”?
var p = new Person('小张', 25)传入的小张去哪了?为什么不是p.name:"小张"?
正在回答 回答被采纳积分+1
1、ES6在“类”的内部可以使用get和set关键字,对某个属性设置存值函数和取值函数,拦截该属性的存取行为
2、ES6中,当this.name中的属性名和set name/get name后面的name一致,this.name就会调用setter/getter,而真实的存储变量是_name,所以这里获取的不是constructor里对实例化对象this.name=name
3、这个跟setter/getter的调用执行时机有关系,当你调用p._name的时候,执行的是setter,不执行getter。
4、小张和小明同时传递进了sayName()方法里面,如果需要获取小张,则需要在var p = new Person('小张', 25)p.sayName()后面执行打印,这样才能打印出小张
希望可以帮到你,如果还有疑问,可以再次提问
- 参与学习 人
- 提交作业 239 份
- 解答问题 10739 个
本阶段带你深入前端开发的肌理,通过ES6基础知识和前端主流高级框架的学习,助你快速构建企业级移动webAPP应用,进入职场的终极battle
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星