我可以根据构造函数的位置调用Javascript函数吗



是否可以将下面的函数CorrectAppleNoWrongAppleNo1WrongAppleNo2WrongAppleNo3组合为一个函数,以便根据构造函数的位置返回适当的值?或者有更好的方法吗?

比如说,如果我从构造函数中的Answer1位置调用函数,它会返回正确的答案,如果我在构造函数的Answer2位置调用相同的函数,则会返回错误的答案。

我之所以这么问,是因为如果说有20个独特的解决方案存在问题,那么将这些函数分别键入return correct return error将是一个令人头疼的问题。我对javascript还是有点陌生,所以如果问题是基本的,我很抱歉!

var paper = [];
paper[0] = new NewQues(`If Person has a total of 1000 Apples. And he gives ${AppleNo()} to Bill. How many apples does he have remaining`, `${CorrectAppleNo()}`, `${WrongAppleNo1()}`, `${WrongAppleNo2()}`, `${WrongAppleNo3()}`);
paper[1] = new NewQues(`If Person has a total of 1000 Apples. And he gives ${AppleNo()} to Bill. How many apples does he have remaining`, `${CorrectAppleNo()}`, `${WrongAppleNo1()}`, `${WrongAppleNo2()}`, `${WrongAppleNo3()}`);
paper[2] = new NewQues(`If Person has a total of 1000 Apples. And he gives ${AppleNo()} to Bill. How many apples does he have remaining`, `${CorrectAppleNo()}`, `${WrongAppleNo1()}`, `${WrongAppleNo2()}`, `${WrongAppleNo3()}`);
paper[3] = new NewQues(`If Person has a total of 1000 Apples. And he gives ${AppleNo()} to Bill. How many apples does he have remaining`, `${CorrectAppleNo()}`, `${WrongAppleNo1()}`, `${WrongAppleNo2()}`, `${WrongAppleNo3()}`);
paper[4] = new NewQues(`If Person has a total of 1000 Apples. And he gives ${AppleNo()} to Bill. How many apples does he have remaining`, `${CorrectAppleNo()}`, `${WrongAppleNo1()}`, `${WrongAppleNo2()}`, `${WrongAppleNo3()}`);
paper[5] = new NewQues(`If Person has a total of 1000 Apples. And he gives ${AppleNo()} to Bill. How many apples does he have remaining`, `${CorrectAppleNo()}`, `${WrongAppleNo1()}`, `${WrongAppleNo2()}`, `${WrongAppleNo3()}`);
function AppleNo() {
var Apples = Math.floor(Math.random() * 400);
SendApples = Apples;
return Apples;
}
function CorrectAppleNo() {
var Temporary = SendApples;
var Correct = 1000 - Temporary;
return Correct;
}
function WrongAppleNo1() {
var somenumber = Math.floor(Math.random() * 20);
var Temporary = SendApples;
var Wrong = 1000 - Temporary - somenumber;
return Wrong;
}
function WrongAppleNo2() {
var somenumber = Math.floor(Math.random() * 20);
var Temporary = SendApples;
var Wrong = 1000 - Temporary + somenumber;
return Wrong;
}
function WrongAppleNo3() {
var somenumber = Math.floor(Math.random() * 20);
var Temporary = SendApples;
var Wrong = 1000 - Temporary - somenumber;
return Wrong;
}
// Functions Regarding Questions Above , Code Below
function NewQues(Ques, Answer1, Answer2, Answer3, Answer4) {
this.Ques = Ques;
this.Answer1 = Answer1;
this.Answer2 = Answer2;
this.Answer3 = Answer3;
this.Answer4 = Answer4;
};
function Change() {
var somenumber = Math.floor(Math.random() * paper.length);
SomeQues = paper[somenumber];
answers = [SomeQues.Ques, SomeQues.Answer1, SomeQues.Answer2, SomeQues.Answer3, SomeQues.Answer4];
document.getElementById("question").innerHTML = answers[0];
document.getElementById("question").value = answers[0];
document.getElementById("answer1").innerHTML = answers[1];
document.getElementById("answer1").value = answers[1];
document.getElementById("answer2").innerHTML = answers[2];
document.getElementById("answer2").value = answers[2];
document.getElementById("answer3").innerHTML = answers[3];
document.getElementById("answer3").value = answers[3];
document.getElementById("answer4").innerHTML = answers[4];
document.getElementById("answer4").value = answers[4];
}
<p id="question"> Question </p>
<p id="answer1"> Answer1 </p>
<p id="answer2"> Answer2 </p>
<p id="answer3"> Answer3 </p>
<p id="answer4"> Answer4 </p>
<button onclick="Change()"> Change Question </button>

我不明白这个问题,但我想我现在正在看你的答案。

一些建议/观察:

  • 如果无论x12还是3,结果都相同,请不要重复代码,使用||("或"(操作
  • 代码应该处理x不是0123的情况,即使您总是期望它是(如果您总是期望是,则可以处理错误(
  • JavaScript中非常非常标准的约定是,变量和非构造函数函数以小写字母开头。当然,您可以在自己的代码中使用任何您喜欢的约定,但如果与他人合作(例如,在Stack Overflow上提问或提供答案(,以下约定会使人们更容易理解您的代码
  • 在现代JavaScript中,不要使用var。使用constlet
  • 命名的一致性很重要。如果使用camelCase(或非标准的UpperCamelCase(,请始终使用它。例如,没有SendApplessomenumber。按照惯例,它们将是sendApplessomeNumber
  • 不要将块上的第一个语句与块的开头{放在同一行,从而隐藏它。它很难阅读,也很难维护(如果你需要在它之前添加一个声明怎么办?(
  • 不要把块的末尾放在块中最后一条语句的末尾来隐藏它。同样,它很难阅读,也很难维护(如果你需要在它后面添加一个语句怎么办?(

诚然,后两种风格有点主观,但尽管{}的走向有几种常见的风格,但它们都没有像那样隐藏它们。(我最近才看到这个——我希望一些有影响力的老师不会教这个。(

考虑到所有这些:

function correctAppleNo(x) {
if (x === 0) {
const right = 1000 - sendApples;
return right;
}
if (x === 1 || x === 2 || x === 3) {
const someNumber = Math.floor(Math.random() * 20);
const wrong = 1000 - sendApples - someNumber;
return wrong;
}
throw new Error(`'x' is expected to be 0, 1, 2, or 3, but got the value ${x}`);
}

这是一个直截了当的答案,我应该早些时候使用Arguments来尝试。

function CorrectAppleNo(x) {
if ( x == 0 ) {
var Correct = 1000 - SendApples ;
return Correct ;}   
if ( x == 1 ) {var somenumber = Math.floor(Math.random() * 20);
var Wrong = 1000 - SendApples - somenumber ;
return Wrong ;}
if ( x == 2) {  var somenumber = Math.floor(Math.random() * 20);
var Wrong = 1000 - SendApples - somenumber ;
return Wrong ;} 
if ( x == 3) {  var somenumber = Math.floor(Math.random() * 20);
var Wrong = 1000 - SendApples + somenumber ;
return Wrong ;}     

}

最新更新