Ваше определение класса нуждается в некоторой работе. Чтобы добавить метод, стандартным способом является добавление его к прототипу конструктора подобно Question.prototype.ask = function() {...}
или определение его как метода с использованием нового JS class
*Синтаксис 1008 * (это все еще добавляет его к прототипу). В противном случае, если вы создадите новую функцию внутри конструктора, вы создадите новую функцию для каждого Question
. Это будет работать, но это не очень хорошая практика (в большинстве случаев), поскольку вам нужна только одна функция. Следующие фрагменты должны работать в основном так, как ожидалось, и будут лучше, чем установка функции внутри конструктора:
«Старый» JS (с использованием prototype
):
function Question(question, correctAnswer, answers) {
this.question = question;
this.answers = answers;
this.correctAnswer = correctAnswer;
}
Question.prototype.ask = function() {
console.log(this.question);
for (let i = 0; i < this.answers.length; i++) {
console.log(i + ": " + this.answers[i]);
}
};
function pickQuestion(q) {
return q[
Math.floor(Math.random() * q.length)
];
}
var question = pickQuestion([
new Question('Choose Answer 1', 1, [
'Answer 1',
'Answer 2',
'Answer 3'
]),
new Question('Choose Answer 3', 3, [
'Answer 1',
'Answer 2',
'Answer 3',
]),
new Question('Choose Answer 2', 2, [
'Answer 1',
'Answer 2',
'Answer 3',
])
]);
question.ask();
«Новый» JS (с использованием class
и другими функциями):
class Question {
constructor(question, correctAnswer, answers) {
this.question = question
this.answers = answers
this.correctAnswer = correctAnswer
}
ask() {
console.log(this.question)
for (let i = 0; i < this.answers.length; i++) {
console.log(i + ": " + this.answers[i])
}
}
}
const pickQuestion = q => q[
Math.floor(Math.random() * q.length)
]
const question = pickQuestion([
new Question('Choose Answer 1', 1, [
'Answer 1',
'Answer 2',
'Answer 3'
]),
new Question('Choose Answer 3', 3, [
'Answer 1',
'Answer 2',
'Answer 3',
]),
new Question('Choose Answer 2', 2, [
'Answer 1',
'Answer 2',
'Answer 3',
]),
])
question.ask()