Javascript 如何使用数组创建新对象而不立即调用它们?

Javascript 如何使用数组创建新对象而不立即调用它们?,javascript,arrays,object,Javascript,Arrays,Object,我是编程新手,我正在做一个小测验游戏。我使用构造函数创建一个对象来表示问题蓝图。我希望对象包含问题的“解决方案”和“可能答案”。我保存在一系列对象中的可能答案。该阵列包含所有新对象,在控制台中测试时效果非常好。(但在运行脚本时无法正常工作) 所以问题是,在我的数组中,我创建了一个新对象,但它会立即被调用到控制台。我不希望数组自动打印到控制台。因为我在游戏中需要这个,所以我只想按要求的索引打印问题。但它正在将整个阵列打印到控制台,而不被调用 (这可能与执行堆栈有关,但我需要帮助解决这个问题。我对编

我是编程新手,我正在做一个小测验游戏。我使用构造函数创建一个对象来表示问题蓝图。我希望对象包含问题的“解决方案”和“可能答案”。我保存在一系列对象中的可能答案。该阵列包含所有新对象,在控制台中测试时效果非常好。(但在运行脚本时无法正常工作)

所以问题是,在我的数组中,我创建了一个新对象,但它会立即被调用到控制台。我不希望数组自动打印到控制台。因为我在游戏中需要这个,所以我只想按要求的索引打印问题。但它正在将整个阵列打印到控制台,而不被调用

(这可能与执行堆栈有关,但我需要帮助解决这个问题。我对编程非常陌生,所以请详细说明)

var问题列表=[
新问题(“学习努力吗?”、[“是”、“否”]、“否”),
新问题(“JavaScript是一种有趣的编程语言吗?”,[“是”,“否”,“是”),];
var pickQuestion=Math.floor(Math.random()*2);
log(问题列表[pickQuestion].ask);
//问题类别(以下):
var问题=功能(问题、答案、正确答案){
这个问题=问题;
这个。答案=答案;
this.correct\u answer=正确答案;
询问:{
console.log(这个问题);
对于(变量i=0;i
这是因为
ask
属性没有正确定义为函数

var Question = function(question, answers, correct_answer) {
  this.question = question;
  this.answers = answers;
  this.correct_answer = correct_answer;
  this.ask = () => {    // note the brackets & arrow, could also be function()
    console.log(this.question);
    for(var i = 0; i < answers.length; i++){
      console.log(i + ": " + answers[i]);
    }
  }
}
var Question=函数(问题、答案、正确答案){
这个问题=问题;
这个。答案=答案;
this.correct\u answer=正确答案;
this.ask=()=>{//注意括号和箭头也可以是function()
console.log(这个问题);
对于(变量i=0;i
您的类定义需要一些工作。要添加方法,标准方法是将其添加到构造函数的
Question.prototype.ask=function(){…}
中,或者使用新的JS语法将其定义为方法(这仍然会将其添加到原型中)。否则,如果您在构造函数中创建一个新函数,您将为每个
问题
创建一个新函数。这将起作用,但这不是一个好的实践(在大多数情况下),因为您只需要一个函数。以下代码段的工作应该与预期的基本一致,并且是比在构造函数中设置函数更好的选项:

“旧”JS(使用
prototype
):

功能问题(问题、正确答案、答案){
这个问题=问题;
这个。答案=答案;
this.correctAnswer=correctAnswer;
}
Question.prototype.ask=函数(){
console.log(这个问题);
for(设i=0;i什么是不应该打印的打印?我不太清楚你所说的“调用对象”是什么意思,也不清楚为什么在
问题
数组中选择一个元素会“将整个数组打印到控制台”。如果您在浏览器控制台中执行所有代码,尤其是逐行执行,则无论您是否显式地
console.log()
,它都将返回代码的结果。我不确定这是否是引起混淆的原因,但可能是相关的。问题构造函数只是设置参数,并且内部有一个遍历该数据的函数。例如,如果我有一个问题(name),它会这样设置;for循环像往常一样只是遍历数组,没有什么特别的。@learnbasic在这里共享
问题
类似乎真的很有帮助。这些都不涉及
console.log
。什么是不应该打印的打印?哦,感谢您修复了它的第一部分,但引入了一个新的错误。现在,当我使用console.log(questionList[pickQuestion].ask())时;当它是函数时,它表示它不是函数。您也可以只执行
questionList[pickQuestion].ask()
。由于该函数中有日志语句,所以附带的console.log是多余的。噢,伙计,非常感谢!现在它就像一个符咒。我最初认为,在使用函数构造函数时,只需执行(functionName:{})即可生成函数。这似乎是我的错误。也感谢您提供有关console.log是多余的信息。如果您使用类语法并显式设置构造函数,您可以定义这样的函数:
classquestion{constructor(Question,answers,correct\u answer){this.Question=Question;this.answers=answers;this.correct\u answer=correct\u answer;}ask(){console.log(this.Question);for(var i=0;i
感谢您如此详细的回复,甚至提供了两套解决方案。我将在稍后尝试一下,提前感谢!希望它能有所帮助!
var Question = function(question, answers, correct_answer) {
  this.question = question;
  this.answers = answers;
  this.correct_answer = correct_answer;
  this.ask = () => {    // note the brackets & arrow, could also be function()
    console.log(this.question);
    for(var i = 0; i < answers.length; i++){
      console.log(i + ": " + answers[i]);
    }
  }
}