“Javascript类”;对象没有方法错误“;

“Javascript类”;对象没有方法错误“;,javascript,Javascript,我有一门课叫提问。我试图通过创建其对应的对象,从另一个类调用此显示方法。但我得到了这个错误。如果你能帮我,我会很高兴的 ///////////////QUESTION/////////////// function Question(id, text){ this.id = id; this.text = text; } function QType1(id, text, choices, answers){ //this is true or false Questi

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

///////////////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();
}
//问题///////////////
功能问题(id,文本){
this.id=id;
this.text=文本;
}
函数QType1(id、文本、选项、答案){
//这是真是假
问题.呼叫(此,id,文本);
这个。选择=选择;
这个。答案=答案;
}
QType1.prototype=新问题();
//继承问题
QType1.prototype.constructor=QType1;
QType1.Display=函数(){
控制台日志(“显示问题”);
}
///////////////测验//////////////////
函数quick(){}
quick.prototype.SetHomeScreen=功能(x,y){
var svgCanvas=CreateCanvas(x,y);
AddText(svgCanvas,100,50,测验输入。设置。布局。文本);
控制台日志(“添加文本”);
启动按钮,但=添加启动按钮(svgCanvas,300250);
控制台日志(“添加启动按钮”);
开始,但是
.on(“点击”),功能(d,i){
startquiz();
});
var startquiz=函数(){
console.log(this);
quick.prototype.StartQuiz();
};
}
quick.prototype.question_objs=[];
quick.prototype.user_ans=[];
quick.prototype.corr_ans=[];
quick.prototype.LoadQuestions=函数(){
对于(var i=0,l=questions.length;i两种可能的原因:

  • 您没有声明
    函数Qtype1(){}
  • 您没有像这样安装qtype1对象
    var q=new qtype1()
  • 编辑:您没有将显示设置为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原型继承理论。

    您是否使用
    new
    关键字实例化了对象?QType1.prototype.Display=function(){,您在DisplayQuesitons方法中使用的是“this”。我看不出“QType1”是“this”的一部分。只需删除“this”从调用中。是的,使用新关键字@this.question_objs.push(新QType1(问题[i].id,问题[i].settings.text,问题[i].settings.choices,问题[i].settings.answers));)实例化对象。我将QType1.Display更改为QType1.prototype.Display,但仍会收到相同的错误。对于(var i=0,l=questions.length;iHi James.我不明白。我找不到我的错误..嗨,乔,我两个都做了。我这样做是为了(var i=0,l=questions.length;i),然后我调用这个.question_objs[i].display();如果你做了
    console.log(this.question_objs[i])
    输出是什么?我将其作为QType1对象获取。当我执行console.log(这个.question_objs[I]QType1实例)时,我将其视为true。