0

我有一堂课叫做 question 。我试图通过创建其对应的对象从另一个类调用此显示方法。但我得到这个错误。如果你能帮我解决这个问题,我会很高兴。

///////////////QUESTION///////////////
function Question(id, text){
    this.id = id;
    this.text = text;
}

function QType1(id, text, choices, answers){
//this is true or false
    Question.call(this, id, text) ;
    this.choices = choices;
   this.answers = answers;
}

QType1.prototype = new Question();

//inherit Question
QType1.prototype.constructor = QType1;

QType1.Display = function(){
    console.log("Display Question");
}

///////////////QUIZ//////////////////
function quiz(){}

quiz.prototype.SetHomeScreen = function(x,y){
    var svgCanvas = CreateCanvas(x,y);
    AddText(svgCanvas,100,50, quiz_input.Settings.Layout.Text);
    console.log("Text Added");
    start_but = AddStartButton(svgCanvas, 300, 250);
    console.log("start button Added");
    start_but
    .on("click", function(d,i) {
                            startquiz();
                                });
    var startquiz = function(){
        console.log(this);
        quiz.prototype.StartQuiz();
    };

}

quiz.prototype.question_objs = [];
quiz.prototype.user_ans = [];
quiz.prototype.corr_ans = [];

quiz.prototype.LoadQuestions = function(){
    for(var i=0, l=questions.length; i<l; i++){
           this.question_objs.push(new QType1(questions[i].id, questions[i].settings.text, questions[i].settings.choices, questions[i].settings.answers));
        }
    console.log(this.question_objs);
}

quiz.prototype.DisplayQuestions = function(){
    var i = 0;
    var l = this.question_objs.length;
    while(i < l){
        console.log(this.question_objs[i] instanceof QType1);
        this.question_objs[i].Display();
    }

}
quiz.prototype.StartQuiz = function(){
        quiz.prototype.LoadQuestions();
        console.log("Starting Quiz");
        quiz.prototype.DisplayQuestions();
}

我得到的错误消息是。 在此处输入图像描述 提前致谢

4

1 回答 1

1

两个可能的原因:

  1. 你没有声明function Qtype1() {}
  2. 你没有像这样实例化一个 qtype1 对象var q = new Qtype1()

编辑:您没有使 Display 成为 QType1 的方法。您可以拥有方法的唯一QType1.Display方法是如果您已声明QType1为变量,例如var QType1 = {} 这样您就可以将 Display 方法直接绑定到变量。但是当您将其声明为构造函数时,您需要QType1.prototype.Display = function () { console.log('Display question...'); };

另外-您的继承有点混乱。你打电话Question.call(this, id, text)然后你声明QType1.prototype = new Question()然后对构造函数做同样的事情。您需要稍微回顾一下您的 javascript 原型继承理论。

于 2013-10-21T19:10:15.953 回答