​移出name后,person的name属性不还是可以通过构造函数修改吗?为什么说是私有化了?

​移出name后,person的name属性不还是可以通过构造函数修改吗?为什么说是私有化了?

问题描述:

​移出name后,person的name属性不还是可以通过构造函数修改吗?为什么说是私有化了?

http://img1.sycdn.imooc.com//climg/60e2f7ac093c423503580368.jpg

正在回答

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

1回答

同学你好,解答如下:

1、将name属性移出Person后,Person的实例就不会再有name属性了。

2、name属性此时是局部作用域中的变量,而不再是全局中的变量了:

http://img1.sycdn.imooc.com//climg/60e3b40909fe86b805920481.jpg

http://img1.sycdn.imooc.com//climg/60e3b50609fb66f100000000.jpg

所以说name被私有化了,即name被限制在了一个局部作用域内了,只有该作用域内的变量、方法等能访问它(比如Person可以改变它),但是全局中或者全局中的其他作用域,无法访问到它。

祝学习愉快!



  • 慕姐5289795 提问者 #1

    老师,还是没有理解,之前不这样写name也是属于Person类实例的属性,也不能全局访问,只有通过实例打点才能访问啊,意思是写在立即执行函数后就不能通过Person实例直接打点访问name属性了,所以就认为它被私有化了是吗?

    2021-07-06 17:04:07
  • 好帮手慕久久 回复 提问者 慕姐5289795 #2

    同学你好,如下理解是对的:

    http://img1.sycdn.imooc.com//climg/60e42356092fd63607800066.jpg

    之前的写法,在全局中是可以通过“实例.name”的形式访问的,此时也属于“在全局中能够访问(在全局中能通过某种形式使用它)”。而写在立即执行函数中后,在全局中,即没法通过“实例.name”的形式访问,也没法直接使用name,此时name就真的只能在立即执行函数中使用了,因此“私有化”了。

    祝学习愉快!

    2021-07-06 17:35:50
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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