老师您好!请问您一个问题

老师您好!请问您一个问题

privateStore={ }
    function _set(name,sex, age){
        privateStore.name=name;
        privateStore.sex=sex;
        privateStore.age=age
    }

在_set函数里面,  privateStore.name=name;
                            privateStore.sex=sex;
                             privateStore.age=age

这是在给privateStore对象添加属性,在一个函数里面还可以为另外一个对象添加属性方法???传统的不都是this吗 。。。

正在回答

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

2回答

同学你好,这样是为了信息的安全性。具体参考如下理解

1.使用this定义属性,实例化构造函数的时候(即 new student),会被实例化对象继承。通过实例化对象就能随意访问信息。

2.在构造函数中定义一个对象privateStore,函数内部的变量无法在外部访问,也不会被实例化对象继承。所以通过privateStore.name给对象添加的属性,外部也自然访问不到,保障了信息的安全性。当我们想要让外部访问的时候,就通过return把信息返回。

同学尝试做一做,如果做到哪里不会了,可以把自己的代码都粘贴上来,老师会为你指导。

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

  • 一物一世界 提问者 #1
    privateStore={ } function _set(name,sex, age){ privateStore.name=name; privateStore.sex=sex; privateStore.age=age } 老师您好,请问 privateStore={ }把这个对象定义在在function _set(name,sex, age){ privateStore.name=name; privateStore.sex=sex; privateStore.age=age }里面和外面在这道题中结果一样的吗 ?谢谢老师
    2019-12-18 19:29:55
  • 一物一世界 提问者 #2
    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>5-4</title> </head> <body> <script> //补充代码 function student(){ privateStore={ } function _set(name,sex, age){ privateStore.name=name; privateStore.sex=sex; privateStore.age=age } // 获取不需要传递参数 function _get() { // alert方法将内容以字符串的形式显示,需要使用加号进行字符串拼接 alert(privateStore.name + privateStore.sex + privateStore.age) } this.get = function() { _get() } this.set = function (name, sex, age) { _set(name, sex, age) } } var a=new student(); // 通过对象点的方式调用方法 a.set('小明','男',23) a.get() </script> </body> </html> 老师您好,为什么还要多此一举再定义函数this.get = function() { _get() } this.set = function (name, sex, age) { _set(name, sex, age) } ,我们不定义this.set和this.get这俩个函数,直接实例化对象后,直接调用 a._set('小明','男',23) a._get() 这样不是更好理解吗 ,请老师解解惑~谢谢您
    2019-12-18 19:53:13
好帮手慕夭夭 2019-12-19 09:49:07

同学你好,问题解答如下:

1.是把对象放在如下函数里面吗?肯定是不对的,在前面的作用域课程中学到过,函数内部的定义的变量或者函数,在函数外部拿不到。如果把privateStore定义在函数_set中,那么 _get函数中使用privateStore时会报错。

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

会报错,不要放在_set中:

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

2.同学的意思是说去掉this定义的属性,只留上面的两个函数吗?这样肯定是不对的,原因如下:

函数内部定义的函数或者变量属于局部变量与函数,只能在student内部使用,外部拿不到的。也不会被实例化对象继承的。所以同学说的a._set('小明','男',23) 不对,局部函数不能被实例化对象调用。


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

而通过this定义的属性或者方法,因为this指向的是实例化对象,所以构造函数中通过this定义的属性或者方法才能够被实例化对象调用。可参考如下图解:

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

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

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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