ES6中的ES6类对象未定义

时间:2018-02-04 08:28:01

标签: javascript

我一直在尝试使用ES6类,但我遇到了以下错误:

VM1534:1 Uncaught ReferenceError: toDo is not defined
    at eval (eval at onclick (index.html), <anonymous>:1:13)
    at HTMLButtonElement.onclick (index.html:35)

我所做的就是点击Add按钮,上面的错误显示在我的控制台中,没有任何反应:(。

我的script.js:

class ToDoClass {
    constructor(){
        alert('Hello World');
        this.tasks = [
            {task : 'Go To Dentist' , isComplete : false},
            {task : 'Do Gradening' , isComplete : true},
            {task : 'Renew Library Account' , isComplete : false}
        ];
        this.loadTasks();
        this.addEventListeners();
    }
    addTaskClick(){
        let target = docuemt.getElementById('addTask');
        this.addTask(target.value);
        target.value= "";
    }

    addTask(task){
        let newTask = {
            task : task,
            isComplete : false
        };

        let parentDiv = document.getElementById('addTask').parentElement;
        if(task === ''){
            parentDiv.classList.add('has-error');
        }
        else{
            parentDiv.classList.remove('has-error');
            this.tasks.push(newTask);
            this.loadTasks();
        }
    }
}

window.addEventListener('load',()=>{
    var toDo = new ToDoClass();
});

我的index.html文件:

<div class="form-group col-md-1">
    <button class="btn btn-primary" onClick="toDo.addTaskClick()">Add</button>
</div>

感谢任何帮助:)。

提前致谢

2 个答案:

答案 0 :(得分:4)

您的变量未在全局范围内声明。如果你只是改变声明的地方

var toDo;

window.addEventListener('load',()=>{
  toDo = new ToDoClass();
});

一切都会按预期工作。

答案 1 :(得分:1)

你应该把你的toDo放在全局,因为你在html click.it中调用函数在全局范围内执行。如果你把toDo函数放在window.onload.it中是在部分范围内。

然而,下面有一个更好的方法,避免在html中使用事件;

&#13;
&#13;
    class ToDoClass {
        constructor(){
            alert('Hello World');
            this.tasks = [
                {task : 'Go To Dentist' , isComplete : false},
                {task : 'Do Gradening' , isComplete : true},
                {task : 'Renew Library Account' , isComplete : false}
            ];
            this.loadTasks();
            this.addEventListeners();
        }
        addTaskClick(){
            let target = docuemt.getElementById('addTask');
            this.addTask(target.value);
            target.value= "";
        }

        addTask(task){
            let newTask = {
                task : task,
                isComplete : false
            };

            let parentDiv = document.getElementById('addTask').parentElement;
            if(task === ''){
                parentDiv.classList.add('has-error');
            }
            else{
                parentDiv.classList.remove('has-error');
                this.tasks.push(newTask);
                this.loadTasks();
            }
        }
    }
    
    window.addEventListener('load',()=>{
       var toDo = new ToDoClass();
       var btnPrimary=document.getElementsByClassName('btn-primary')[0];
btnPrimary.addEventListener('click',toDo.addTaskClick , false);
    });
&#13;
    <div class="form-group col-md-1">
        <button class="btn btn-primary">Add</button>
      </div>
&#13;
&#13;
&#13;