2017-04-21 38 views
-1

处理Javascript对象和函数。面临问题。Uncaught TypeError:无法设置未定义的属性'todoText'

var todoList = { 
     todo:[], 
     displayTodo:function(){ 
     console.log('My Todo:',this.todo); 
     }, 
     addTodo:function(todoText){ 
     this.todo.push({ 
      todoText:todoText, 
      complete:false 
     }); 
     this.displayTodo(); 
     }, 
     changeTodo:function(posi,newTodo){ 
     //this.todo[posi] = newTodo; 
     this.todo[posi].todoText=newTodo; 
     this.displayTodo(); 
     }, 
     toggleComplte:function(posi){ 
     var todo = this.todo[posi]; 
     todo.complete = !todo.complete; 
     this.displayTodo(); 
     } 
    } 

    todoList.addTodo('Item1'); 
    todoList.toggleComplte(0); 

运行时出现错误。

VM1196:16 Uncaught TypeError: Cannot set property 'todoText' of undefined 
    at Object.changeTodo (<anonymous>:16:29) 
    at <anonymous>:21:10 

有人可以建议什么是错误吗?

+0

看起来像你的“this.todo [POSI]”将返回一个未定义changeTodo函数中的值。 Theres上面没有任何关于你调用changeTodo函数的例子,所以需要更多的示例来进一步提供帮助。 –

+1

可能没有任何待办事项,因为'this.todo [0]'是未定义的(即,您在最后有效地执行了'undefined.todoText = ...',并且这会导致您得到的错误)。如果您使用过调试器,您可以轻松看到。看看这个教程:https://developers.google.com/web/tools/chrome-devtools/javascript/ – CherryDT

+0

@AidanGee是的。最初我使用addTodo函数添加了一个值,只是为了确保我有一些切换值。我正在编辑程序中的最后一行,然后检查。 – Rushit

回答

1

与您当前的变化,你的代码工作正常,我没有看到任何控制台错误

var todoList = { 
 
     todo:[], 
 
     displayTodo:function(){ 
 
     console.log('My Todo:',this.todo); 
 
     }, 
 
     addTodo:function(todoText){ 
 
     this.todo.push({ 
 
      todoText:todoText, 
 
      complete:false 
 
     }); 
 
     this.displayTodo(); 
 
     }, 
 
     changeTodo:function(posi,newTodo){ 
 
     //this.todo[posi] = newTodo; 
 
     this.todo[posi].todoText=newTodo; 
 
     this.displayTodo(); 
 
     }, 
 
     toggleComplte:function(posi){ 
 
     var todo = this.todo[posi]; 
 
     todo.complete = !todo.complete; 
 
     this.displayTodo(); 
 
     } 
 
    } 
 

 
    todoList.addTodo('Item1'); 
 
    todoList.toggleComplte(0);

相关问题