关于getter和setter还是不懂
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <!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积分~
来为老师/同学的回答评分吧