开发者问题收集

未捕获的类型错误:无法读取未定义的属性“replace”

2020-03-13
409

当我在描述和值部分输入详细信息并点击绿色箭头时,我收到错误。有人能看看我这边出了什么问题吗! 请参考以下链接 https://jsfiddle.net/5wdb0eco/

错误消息:

app.js:86 Uncaught TypeError: Cannot read property 'replace' of undefined
    at Object.addListItem (app.js:86)
    at HTMLButtonElement.ctrlAddItem (app.js:124)

在此处输入图片描述 https://jsfiddle.net/5wdb0eco/

1个回答

查看以下代码:

        var ctrlAddItem = function(){
            var input, newItem;
            //  1. GET THE FIELD INPUT DATA
            input = UIController.getInput();
            console.log(input.type)
            //console.log(input);
            //  2. ADD THE ITEM TO THE BUDGET CONTROLLER
            newItem = budgetCtrl.addItem(input.type, input.description, input.value);
            console.log(newItem)
            //  3. ADD THE ITEM TO THE UI
            UICtrl.addListItem(newItem, newItem.type);

            //  4. CALCULATE BUDGET
            //  5. DISPLAY THE BUDGET ON THE UI
        };

我添加了 console.log,但是 budgetCtrl.addItem 中的 newItem 未返回附加有 type 属性的对象。因此,将其传递给 UICtrl.addListItem 函数会导致 undefined

您返回的 newItem 是以下之一:

        var Expense = function(id, description, value){
            this.id = id;
            this.description = description;
            this.value = value;
        };
        var Income = function(id, description, value){
            this.id = id;
            this.description = description;
            this.value = value;
        };

new Expensenew IncomeaddListItem

更改您的费用和收入函数以传入 type 参数,然后在 addItem 函数中将 type 传递到实例中,如下所示:

                if(type === 'exp'){
                    newItem = new Expense(type, ID, des, val);
                }
                else if(type === 'inc') {
                    newItem = new Income(type, ID, des, val);
                }
SKeney
2020-03-13