没搞懂这样做的意义?请老师指教!

来源:5-4 编程练习

QiuBaa

2019-11-07 11:41:31

以下是根据题目提示写的代码:

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
</head>
<body>
<script type="text/javascript">
function student() {
       var privateStore = {};
function _set(name,sex,age) {
       privateStore.name = name;
       privateStore.sex = sex;
       privateStore.age = age;
}
       this.set = function () {
           return _set;
};
function _get() {
           return privateStore;
}
       this.get = function () {
           return _get;
}
   }
var student = new student();
var set = student.set();
var get = student.get();
set('小明','男','23');
console.log(get());
</script>
</body>
</html>



我没搞懂的是,为什么不直接把_set和_get里的内容直接写在set和get函数里,非要用set或get去调用_set和_get,这不是多此一举吗?


我修改成以下代码,实现效果是一样的,不知道他们实际有什么区别:

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
</head>
<body>
<script type="text/javascript">
function student() {
       var privateStore = {};
this.set = function (name,sex,age) {
           privateStore.name = name;
privateStore.sex = sex;
privateStore.age = age;
};
this.get = function () {
           return privateStore;
}
   }
var student = new student();
var set = student.set;
var get = student.get;
set('小明','男','23');
console.log(get());
</script>
</body>
</html>

写回答

1回答

好帮手慕粉

2019-11-07

同学你好,首先同学的两种实现效果都是正确的哦。

1、本题主要要让同学练习闭包的使用。

2、这样做的意义是我们可以只提供接口get和set,不看内部结构,如果要使用的话,只需要知道这个方法是怎么用的,而不需要知道内部具体怎么实现的,直接用接口就行了。实际工作中也是这样的,我们一般是看不到前面的代码是怎么实现的,只有一个接口去调用。以当前的练习题为例,主要是为了数据的安全性哦, 在构造函数student中定义两个普通的函数,函数会形成一个局部作用域,所以里层的函数不会被外界访问到,这样在内部函数中处理数据,当想要给外界访问的时候,就给student定义两个自身的方法set和get,并返回内部函数。这样实例化的时候,就可以访问了。

3、而同学的第二种实现则是将方法直接暴露了出去,我们是可以直接操作内部结构和数据的,这样是不安全的哦。

4、实际应用,老师这里给同学举一个简单的例子, 一个简单的学生管理系统,学生输入信息,就可以将对应的信息存到系统中,学生不可以自己操作将数据存到系统中。

我们就可以使用这种思路去实现, 在函数的内部定义局部的函数用来判断用户输入的信息格式是否合法,合法的话就将其写入系统中, 这样我们只需提供给用户一个方法让其输入信息即可,用户不用关心内部的实现机制。

希望我的回答能够帮助到你,望采纳,祝学习愉快!

0

0 学习 · 14456 问题

查看课程