老师有个问题

老师有个问题

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>5-4</title>
</head>
<body>
<script>

//补充代码
function student(){
    var privateStore = {};
    function _set(name,sex,age){
        privateStore.name = name;
        privateStore.sex = sex;
        privateStore.age = age;
    }
    function _get(){
        return console.log({
            name:privateStore.name,
            sex:privateStore.sex,
            age:privateStore.age
        });
    }
    this.get = function (){
        return _get();
    }
    this.set = function (){
        return _set();
    }
    
}
var student1 = new student();
student1.set()("小明","男","23");
student1.get();
</script>
</body>
</html>


为什么会报错呢

正在回答 回答被采纳积分+1

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

3回答
好帮手慕言 2020-02-12 16:52:10

同学你好,_set是一个方法,如果_set加上括号,那么在调用set方法时,得到的就是_set方法的返回值。而同学在用set方法时,写的是两个括号,如下:
http://img1.sycdn.imooc.com/climg/5e43bc2009ec7fca04990073.jpg

_set方法的返回值不是一个函数了,不能加()调用,因此上方的写法是会报错的。

在上次回答中也提到了,如果想要不报错的话,在调用set方法时,要少加一个括号,也就是如下写法:
http://img1.sycdn.imooc.com/climg/5e43bac609f7942f05690283.jpg

因为上方的写法,并不能正确的传递参数,所以得到的会是undefined。如下:

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

_get加括号了,但是在调用时,是一个括号,如下:
http://img1.sycdn.imooc.com/climg/5e43bb6c0941e31b04370052.jpg

如果像set方法一样,两个括号,那么也是会报错的。

可能会比较绕,同学可以再理解下。

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

好帮手慕言 2020-02-12 10:04:12

同学你好,可以参考下方:

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

如果不去掉_set后面的括号,那么在调用时,要少加一个括号,就不会报错了,但是_set直接执行,没有办法传递参数了,得到的值会是undefined,因此即使不报错也不符合要求

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

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

  • 提问者 小丁同学ddd #1
    还是不太明白呢老师,_set()不是个方法吗?_get为什么加括号就没问题呢
    2020-02-12 14:31:28
提问者 小丁同学ddd 2020-02-11 19:12:38

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>5-4</title>
</head>
<body>
<script>

//补充代码
function student(){
    var privateStore = {};
    function _set(name,sex,age){
        privateStore.name = name;
        privateStore.sex = sex;
        privateStore.age = age;
    }
    function _get(){
        return console.log({
            name:privateStore.name,
            sex:privateStore.sex,
            age:privateStore.age
        });
    }
    this.get = function (){
        return _get();
    }
    this.set = function (){
        return _set;
    }
    
}
var student1 = new student();
student1.set()("小明","男","23");
student1.get();
</script>
</body>
</html>


不太明白为什么return _set后面的括号去掉就可以了呢?

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

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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