Javascript 我得到一个错误,说我的模块中的方法不是函数。不知道为什么。我以同样的方式声明了另一个方法,它运行良好

Javascript 我得到一个错误,说我的模块中的方法不是函数。不知道为什么。我以同样的方式声明了另一个方法,它运行良好,javascript,html,Javascript,Html,单击此应用程序中的按钮时出错。我被告知我声明的addItem方法不是函数。不知道为什么。另一个模块工作正常。我得到一个错误,说我的模块中的方法不是函数。不知道为什么。我以同样的方式声明了另一个方法,它工作得很好 //模块1 var UIController=(函数(){ var DOMstrings={ 输入类型:'.添加类型', inputDescription:'。添加描述', inputValue:'。添加值', inputBtn:'。添加\uu btn' } 返回{ getInput:

单击此应用程序中的按钮时出错。我被告知我声明的addItem方法不是函数。不知道为什么。另一个模块工作正常。我得到一个错误,说我的模块中的方法不是函数。不知道为什么。我以同样的方式声明了另一个方法,它工作得很好

//模块1
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(){
返回字符串;
}	
};
})();
//单元2
变量budgetController=(函数(){
//私人部门
var费用=功能(id、说明、值){
this.id=id;
this.description=描述;
这个值=值;
}
var收入=功能(id、说明、值){
this.id=id;
this.description=描述;
这个值=值;
}
风险值数据={
allItems:{
exp:[],
股份有限公司:[],
},
总数:{
实验:0,
公司:0
}		   
};
//公共部门
返回{
测试:'测试',
//如果有人调用此方法,它将基于Expense | | Income对象创建一个新实例
附加项:函数(类型、des、val){
//声明该方法使用的变量
var newItem,ID;
//我们希望ID值等于最后一个ID值+1
//ID的值等于数据对象的allItems属性中的值
//该属性中的值等于
//数据对象的allItems属性中的值的长度减去1
//创建新ID
如果(data.allItems[type].length>0){
//var ID=data.allItems[type][data.allItems[type].length-1].ID+1;
ID=data.allItems[type][data.allItems[type].length-1].ID+1;
}否则{
ID=0;
}
//创造
如果(类型=='exp'){
//该方法是使用上述FC/P创建I.的方法
新项目=新费用(ID、des、val);
}else if(类型==='inc'){
//该方法是创建I的方法。如果上述收入FC/P
新项目=新收入(ID、des、val);
}
//将其推送到上述数据结构中
data.allItems[type].push(newItem);
//返回新元素
返回新项目;
}
};
});
//单元3
变量globalController=(函数(UICtrl,budgetCtrl){
//瓦尔斯说。
var预算,输入,新项目;
函数setupEventListeners(){//(3)
var DOM=UICtrl.getDOMstrings();
document.querySelector(DOM.inputBtn).addEventListener('click',function()){
ctrlAddItem();
});
document.querySelector(DOM.inputBtn).addEventListener('keypress',函数(e){
如果(e.keyCode===13){
ctrlAddItem();
}
});
};
函数ctrlAddItem(){//(4)
//1.获取输入值
input=UICtrl.getInput();
控制台日志(输入);
//2.将新项目添加到我们的数据结构/预算控制器
//newItem=BDCtrl.addItem();
budget=budgetCtrl.addItem();
控制台日志(预算);
//input.type、input.description、input.value
//3.将新项目添加到UI
//4.计算预算
//5.在界面上显示预算
}
返回{
init:function(){//(2)
log('应用程序已启动');
setupEventListeners();
}	   
}
})(UIController,预算控制器);
globalController.init();//(1) 

预算的
%Month%中的可用预算:
+ 2,345.64
收入
+ 4,300.00
费用
- 1,954.36
45%
+
-
收入
费用

budgetCtrl
返回一个对象,该对象具有名为
addItem
的方法
addItem
不是
的方法,而是DGETCTRL

您必须调用
budgetCtrl
,然后可以对返回的对象调用
addItem
,如下所示

budgetCtrl().addItem();
经过这一过程后,您会遇到一个不同的错误,需要解决这个问题

//模块1
var UIController=(函数(){
var DOMstrings={
输入类型:'.添加类型',
inputDescription:'。添加描述',
inputValue:'。添加值',
inputBtn:'。添加\uu btn'
}
返回{
getInput:function(){
返回{
类型:document.querySelector(DOMstrings.inputType).value,
描述:document.querySelector(D