2017-04-21 37 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 [ポジ]」が未定義を返しているように見えますchangeTodo関数の値です。上記の例では、changeTodoという関数を呼び出していますので、さらに役立つ例が必要です。 –

+1

おそらくtodosは存在しないので、 'this.todo [0]'が定義されていないので、todo#0にアクセスしているergoは失敗します(つまり、最後に効果的に '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);

関連する問題