Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何为事件侦听器使用构造函数的方法_Javascript_Oop_Constructor_Closures_Prototype - Fatal编程技术网

Javascript 如何为事件侦听器使用构造函数的方法

Javascript 如何为事件侦听器使用构造函数的方法,javascript,oop,constructor,closures,prototype,Javascript,Oop,Constructor,Closures,Prototype,所以我正在开发OO测验应用程序,我有一个测验构造器,它应该启动测验应用程序本身,包括所有的问题等等。我想做的第一件事是当用户键入他的名字和电子邮件,然后单击提交按钮console.log,用JSON字符串记录他新创建的用户对象的名字、电子邮件等等。我给了Quike prototype一个方法clickBtn,该方法检查输入是否为空,如果为空,则给我JSON字符串 在这个方法之后,我在一个按钮上添加了事件监听器,并没有给它一个随机函数,而是prototype.clickBtn方法。不幸的是,我一直

所以我正在开发OO测验应用程序,我有一个测验构造器,它应该启动测验应用程序本身,包括所有的问题等等。我想做的第一件事是当用户键入他的名字和电子邮件,然后单击提交按钮console.log,用JSON字符串记录他新创建的用户对象的名字、电子邮件等等。我给了Quike prototype一个方法clickBtn,该方法检查输入是否为空,如果为空,则给我JSON字符串

在这个方法之后,我在一个按钮上添加了事件监听器,并没有给它一个随机函数,而是prototype.clickBtn方法。不幸的是,我一直得到未捕获的引用错误:clickBtn未定义错误。有什么问题?代码段:

function Quiz (User, Question) {
  this.user = User;
  this.question = Question;
}

Quiz.prototype.constructor = Quiz;

Quiz.prototype.clickBtn = function () {
      if (theName.value == "") {
        var message = document.createElement("p");
        message.className = "message";
        message.innerHTML = "You forgot the name and email";
        var body = document.getElementsByTagName("body")[0];
        body.appendChild(message);
      } else {
        var message = document.getElementsByClassName("message")[0]; // first one
        message.parentNode.removeChild(message);
        console.log(message);
        var user1 = new User (theName.value, theEmail.value);
        users.push(user1);
        console.log("Quiz Created On: " + this.getQuizDate);
        console.log(JSON.stringify(users, null, 2));
      }
      theName.value = "";
      theEmail.value = "";
}

var btn = document.getElementById("button");
btn.addEventListener("click", clickBtn);

您必须添加测验方法的clickBtn方法,目前您正在使用clickBtn,但clickBtn是测验方法,因此要访问clickBtn,您需要使用测验方法实例调用它

首先,创建测验实例:

var quiz = new Quiz; 
然后将事件侦听器附加为测验对象的方法

btn.addEventListener("click", quiz.clickBtn);

这是一种非常奇怪的方法,尤其是因为如果不创建新实例,这些方法的原型设计就不能真正做到任何事情?问题不清楚为什么我们必须创建新实例,不能只说quick.clickBtn?它在句法上是错误的吗?