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