请教题目实现是否正确?
function Student(){
var _privateStore = {};
var _set = function(name, value){
this[name] = value
};
var _get = function(name, value){
return this[name];
};
this.set = function(name, value){
return _set(name, value);
}
this.get = function(name, value){
return _get(name, value);
}
}
var student = new Student();
student.set("name", "张宇");
student.set("sex", "男");
student.set("age", 18);
console.log(student.get("name"));
console.log(student.get("sex"));
console.log(student.get("age"));
我看其他同学的例子好像是在set和get里面直接返回_set和_get, 请问我这个实现对吗?
还有不清楚为什么不直接在get和set里面操作内部数据, 却还要调用_get和_set?
正在回答
同学你好,如果抛开此题,你这样实现是可以的,闭包理解的没有问题。而本题只是为了刻意练习闭包,代码中_set和_get也只是单纯的return出去而已。
另外实际在库设计时,内部的实现往往在内部,然后接口操作,而不是在对外的接口上实现。也就是一般都在_set和_get中操作_privateStore。
祝学习愉快!
同学你好,问题解答如下:
1、这样效果实现了,但是Student函数中有一个_privateStore对象,初始化了并没有使用哦,可以将属性添加在这个对象中,获取的时候后面跟着调用不需要传参,参考
2、这样是为了信息的安全性。set和get是对外的接口,_set和_get是内部私有的,对数据的操作在私有函数中进行,构造函数中定义一个对象privateStore,函数内部的变量无法在外部访问,也不会被实例化对象继承。所以通过privateStore[name]给对象添加的属性,外部也自然访问不到,保障了信息的安全性。当我们想要让外部访问的时候,就通过return把信息返回。
如果我的回答帮助到了你,欢迎采纳,祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星