我试图找到问题的答案,但实际上我在这里找不到的答案对我有帮助。我知道这是常见问题,但我找不到正确的答案。 这是我的代码:
//Constructor for creating questions
function Question(question, answers, correct) {
this.question = question;
this.answers = answers;
this.correct = correct;
}
//Creating question
var q1 = Question('Is JavaScript the best programming lenguage?', ['Yes', 'No'], 0);
var q2 = Question('What is the name of your teacher?', ['Mike', 'John', 'Jonas'], 2);
var q3 = Question('How would you best describe coding?', ['Boring', 'Fun', 'Tedius', 'Hard'], 1);
//Displaying question and answers
Question.prototype.displayQuestion = function(){
console.log(this.question);
for (var i = 0; i < this.answers.length; i++) {
console.log(i + '. ' + this.answers[i]);
}
}
//Choosing random question
var questions = [q1, q2, q3];
var n = Math.floor(Math.random() * questions.length);
questions[n].displayQuestion();
我不断 未捕获的TypeError:无法读取未定义的属性“ displayQuestion” 在Challenge.js:27 在此先感谢:)
答案 0 :(得分:6)
您正在呼叫Question(...)
,但实际上是要呼叫new Question(...)
。
在不使用Question(...)
的情况下调用new
时,它将返回undefined
,因为它没有return
的值(而且this
也是window
一个新对象)。
使用new
时,this
被设置为新创建的对象,并且如果没有return
值,则new Question
调用将返回新创建的{ {1}}对象。当然,这就是您期望代码执行的操作。
答案 1 :(得分:5)
在new
之前使用Question()
关键字