Javascript 返回值未定义

Javascript 返回值未定义,javascript,html,Javascript,Html,我遵循本教程使用模块创建我的第一个应用程序。出于某种原因,代码不起作用,我真的尝试了所有的方法,但我无法理解 我在模块budgetController中创建了函数测试,以查看是否正在将该项添加到列表中,但当我单击按钮添加该项时,出现了以下错误TypeError:data.allItems[type]未定义 var预算控制器=(函数(){ var费用=功能(id、说明、值){ this.id=id; this.description=描述; 这个值=值; }; var收入=功能(id、说明、值)

我遵循本教程使用模块创建我的第一个应用程序。出于某种原因,代码不起作用,我真的尝试了所有的方法,但我无法理解

我在模块budgetController中创建了函数测试,以查看是否正在将该项添加到列表中,但当我单击按钮添加该项时,出现了以下错误TypeError:data.allItems[type]未定义

var预算控制器=(函数(){
var费用=功能(id、说明、值){
this.id=id;
this.description=描述;
这个值=值;
};
var收入=功能(id、说明、值){
this.id=id;
this.description=描述;
这个值=值;
};
风险值数据={
allItems:{
exp:[],
公司:[]
},
总数:{
inc:0,
经验:0
}
};
返回{
附加项:函数(类型、des、val){
var newItem,ID;
if(data.allItems[type].length>0){
ID=data.allItems[type][data.allItems[type].length-1].ID+1;
}否则{
ID=0;
}
如果(类型==‘费用’){
新项目=新费用(ID、des、val);
}否则如果(类型==‘收入’){
新项目=新收入(ID、des、val);
}
data.allItems[type].push(newItem);
返回新项目;
},
测试:函数(){
控制台日志(数据);
}
}
})();
var UIcontroller=(函数(){
var domStrings={
输入类型:“.添加类型”,
inputDescription:“.添加描述”,
inputValue:“.添加值”,
inputBtn:'。添加\uu btn'
};
返回{
getInput:function(){
返回{
类型:document.querySelector(domStrings.inputType).value,
说明:document.querySelector(domStrings.inputDescription).value,
值:document.querySelector(domStrings.inputValue).value
};
},
getDomStrings:function(){
返回字符串;
}
};
})();
var控制器=(函数(cntrlBudget,cntrlUI){
var addEventListener=函数(){
var dom=cntrlUI.getDomStrings();
文档.添加的事件列表器(“按键”,功能(事件){
if(event.keyCode==13 | | event.which==13){
addItems();
}
});
document.querySelector(dom.inputBtn).addEventListener(“单击”,添加项);
};
var addItems=函数(){
var输入,newItem;
input=cntrlUI.getInput();
newItem=cntrlbudent.addItem(input.type、input.description、input.value);
}
返回{
init:function(){
addEventListener();
}
}
})(预算控制器,UIcontroller);
controller.init()
/**********************************************
***一般的
**********************************************/
* {
保证金:0;
填充:0;
框大小:边框框;
}
.clearfix::之后{
内容:“;
显示:表格;
明确:两者皆有;
}
身体{
颜色:#555;
字体系列:开放式SAN;
字体大小:16px;
位置:相对位置;
高度:100vh;
字体大小:400;
}
.对{
浮动:对;
}
瑞德先生{
颜色:#FF5049!重要;
}
.红色焦点:焦点{
边框:1px实心#FF5049!重要;
}
/**********************************************
***顶部
**********************************************/
.顶{
高度:40vh;
背景图像:线性渐变(rgba(0,0,0,0.35),rgba(0,0,0,0.35)),url(back.png);
背景尺寸:封面;
背景位置:中心;
位置:相对位置;
}
.预算{
位置:绝对位置;
宽度:350px;
最高:50%;
左:50%;
转换:翻译(-50%,-50%);
颜色:#fff;
}
.预算标题{
字号:18px;
文本对齐:居中;
边缘底部:10px;
字体大小:300;
}
.预算价值{
字体大小:300;
字体大小:46px;
文本对齐:居中;
边缘底部:25px;
字母间距:2px;
}
.预算收入,
.预算费用{
填充:12px;
文本转换:大写;
}
.预算收入{
边缘底部:10px;
背景色:#28B9B5;
}
.预算费用{
背景色:#FF5049;
}
.预算收入-文本,
.预算费用-文本{
浮动:左;
字体大小:13px;
颜色:#444;
边缘顶部:2倍;
}
.预算收入——价值,
.预算费用-价值{
字母间距:1px;
浮动:左;
}
.预算收入——百分比,
.预算费用——百分比{
浮动:左;
宽度:34px;
字体大小:11px;
填充:3px0;
左边距:10px;
}
.预算费用——百分比{
背景色:rgba(255、255、255、0.2);
文本对齐:居中;
边界半径:3px;
}
/**********************************************
***底部
**********************************************/
/*****形式*****/
.添加{
填充:14px;
边框底部:1px实心#e7e7e7;
背景色:#f7f7f7;
}
.添加容器{
保证金:0自动;
文本对齐:居中;
}
.添加\类型{
宽度:55px;
边框:1px实心#e7e7e7;
高度:44px;
字号:18px;
颜色:继承;
背景色:#fff;
右边距:10px;
字体大小:300;
过渡:边界0.3s;
}
.添加描述,
.添加值{
边框:1px实心#e7e7e7;
背景色:#fff;
颜色:继承;
字体家族:继承;
字体大小:14px;
填充:12px 15px;
右边距:10px;
边界半径:5px;
过渡:边界0.3s;
}
.添加描述{
宽度:400px;
}
.添加值{
宽度:100px;
}
.添加{
字体大小:35px;
背景:无;
边界:无;
颜色:#28B9B5;
光标:指针;
显示:内联块;
垂直对齐:中间对齐;
线高:1.1;
左边距:10px;
}
.add\u btn:活动{
变换:translateY(2px);
}
.添加类型:焦点,
.添加描述:焦点,
.添加值:焦点{
大纲:无;
边框:1px实心#28B9B5;
}
.add_ubtn:焦点{
大纲:无;
}
/*****列表*****/
.集装箱{
宽度:1000px;
保证金:60像素自动;
}
.收入{
浮动:左;
宽度:475px;
右边距:50px;
}
.费用{
浮动:左;
宽度:475px;
}
氢{
文本转换:大写;
字号:18px;
字体大小:400;
边缘底部:15px;
}
.icome\uuuu标题{
颜色:#28B9B5;
}
.费用和头衔{
C
     var data = {
                allItems: {
                    expense: [],
                    income: []
                },


                totals: {
                    income: 0,
                    expense: 0
                }