5-4练习
来源:5-4 编程练习
qq_林二爷_0
2018-09-29 20:14:05
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<script type="text/javascript">
var store=(function(){
//空对象,存放私有数据
var privateStore={};
return {
//获取信息
get:function(){
return privateStore;
},
//添加或修改信息
set:function(name,key,value){
if(Object.prototype.toString.call(key)!=='[Object Object]'){
privateStore[name][key]=value;
}else{
privateStore[name]=key;
}
}
}
})();
//添加一个学生某一项信息
store.set("小明","age",23);
//添加一个学生全部信息
store.set("小强", {"age":23,"sex":"男"});
//调用get方法输出已添加的所有信息
console.log(store.get());
</script>
</body>
</html>1.为什么报错提示“age为undefined”?
2.在这里store被定义为一个函数,为什么它可以访问自己内部的函数?
3.为什么把整个store的函数体包起来再加个()?
2回答
好帮手慕夭夭
2018-09-30
1. ,判断添加不对 , 如下改为小写的 :

2.因为代码中先是给创建了学生的某一项信息 ,此时这个学生还没有创建 ,所以需要先创建一个小明,再设age .否则privateStore[name][key]=value;相当于undefined[key]=vlaue .

或者直接在方法中加入判断 :

这样当你没有创建这个学生时 ,却添加了这个学生的某一项信息时 , 代码会帮你创建这个学生 .
3.!==是不等于的意思 ,抱歉由于老师的失误 , 把代码看错了 . 给同学带来不便 , 希望同学能够谅解 . 以后老师也会更加努力 , 更加认真细心的为同学解答问题 , 给同学们带来更优质的服务呢
祝学习愉快 ,望采纳
好帮手慕夭夭
2018-09-30
因为代码中如下真好写相反了 ,如下:

改为如下:
当传入的第二个参数不是一个对象时 , 要执行privateStore[name][key] = value;

而当第二个参数传入一个对象时 , 则执行privateStore[name] = key;

2.同学的第一个问题和第二个问题可以放在一起解释 .因为函数加()()表示立即执行 , 所以运行代码 时 ,会自己执行()里面的内容 , 然后执行结果返回给store ,它返回的是一个对象 , 可输出store:

返回的结果 ,store返回的是一个对象 ,相当于store={get:xx,set:xx} , 所以方法就可以调用了

同学掌握的知识还不是很扎实 , 建议多回顾一下视频 . 巩固所学知识 . 希望解答了你的疑惑 , 祝学习愉快 ,望采纳
相似问题