老师,你看这么理解对么

老师,你看这么理解对么

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

虽然 obj中没有一开始定义 name的值是什么 ,但是有name属性值的方法 所以在obj外设置name的值时 会触发set 的方法 将222 赋值给了_name 这里不等于name的值是222;


正在回答

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

3回答

同学你好,可以这样理解,具体如下:

get和set方法,是对象默认就有的属性:访问对象的属性时,默认会调用get方法;修改属性值时,默认调用set方法,所以get和set内的代码,书写形式比较多样。比如:我们这里为了给obj设置name属性,在get和set方法内,实际操作的是_name,即_name这个属性做为一个中间纽带,利用它,实现了为obj设置name属性;如果在get和set内直接操作name属性,会造成死循环现象,如下:

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

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

原因就是在get方法内,代码执行“return this.name”时,由于“this.name"是获取name属性,还会触发get方法,所以死循环:

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

因此在get和set方法内,将name属性换成了_name,对于该点,同学了解即可。

祝学习愉快!

好帮手慕言 2020-09-30 16:04:24

同学你好,解答如下:

1、_name和name是不同的。

2、给name赋值调用的是set后面的name方法,222是传入的val参数

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

这样就给_name属性赋值了,祝学习愉快~

  • 提问者 蝶蝶 #1
    老师 如果只是定义一个空的obj obj.name = 222 还是赋值成功了 这里的set 跟 get的方法是不是是用来提现 写了这两个方法后 调用obj.name 就会执行这两个函数 然后做一些其他操作呢 这么理解是正确的的嘛
    2020-09-30 16:09:18
好帮手慕言 2020-09-30 14:45:26

同学你好,访问对象的属性时,默认会调用get方法。修改属性值时,默认调用set方法。那么修改name属性值为222的话,会先调用set方法,把val(222)赋值给this._name ,然后通过console访问obj,_name就是222

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

  • 提问者 蝶蝶 #1
    _name 等于name么 不等于吧? val(222)赋值给this._name 只是赋值给了_name 但是name这个是没有值的哇 我的意思是整个流程可以看做是给name赋值 但是实质上是给_name赋值了 是 _name顶替了name对么
    2020-09-30 14:48:31
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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