问:this.populateIdWithHTML(“ choice + i,choices [i]”); this.populateIdWithHTML(“ guess + i,choices [i]”);
有人可以更好地解释guess + i和choice [i]的工作原理。我的理解是i是数组中选择的数目,但是im只是对语法以及如何知道要选择哪个问题感到困惑?需要有人分解代码并使其更清晰。
答:在解释之前,我需要指出一件事。好像您在问这些行。因为this.populateIdWithHTML("choice + i, choices[i]"); this.populateIdWithHTML("guess + i, choices[i]");在两种方式下没有意义:语法,错误的参数。
这可能是您好奇的台词。
这个。populateIdWithHTML (“ choice” + i , 选择[ i ]);
这个。wonderHandler (“ guess” + i , 选择[ i ]);
要真正了解它们的作用,您需要跟踪不同组件上的堆栈,但这将是一个很长的答案。另外,我假设您已经了解了该项目之前的所有材料。
populateIdWithHTML(id, text)将一些文本链接到具有id属性的html标签。在这种情况下,
guessHandler(id, guess)将给指定ID的按钮标签分配猜测,并使用Quiz.prototype.guess处理评分机制并将测验指针移至下一个。最后,它使用QuizUI.displayNext()负责显示下一个测验。
考虑到这些功能,在此上下文中使用了这些功能
var choices = quiz 。getCurrentQuestion ()。选择;
为(VAR我= 0 ;我<选择。长度;我++ ){此。populateIdWithHTML (“ choice” + i ,选择[ i ]); 这个。wonderHandler (“ guess” + i ,选择[ i ]); }
现在,关于您的第二个问题,它如何知道获得哪种选择。
可以找到实际的选择,app.js其中[ "George Washington", "Thomas Jefferson" ]第一和["Pi","42"]第二。它们被保存在Question对象中,并且其构造函数位于at,question.js但是您需要知道的choices只是数组,并且quiz.getCurrentQuestion()将指向正确的Question对象并检索它。
简而言之,问题1的迭代器为[George George Washington,Thomas Jefferson],问题2的迭代器为[Pi],42。我假设您知道for循环的作用以及它在表面级别的工作方式。
因此,结合所有这些,在第一次迭代中,“ George Washington”将出现在内部,<p id="choice0"></p>并且将向click事件分配一个事件,该事件将<button id="guess1" class="btn--default">Select Answer</button>在单击时评估猜测。
要“完全”理解,您需要跟踪每个组件的创建方式以及与其他零件的交互。因此,如果您完全迷路了,则需要返回到该项目最初的开始位置。如果我详细解释这两个功能如何与其他组件交互,那么这篇文章将变得太长。但是,如果您不介意以某种抽象的方式理解它,则可能只需要知道每个函数的作用并继续前进即可。