2015-11-20 5 views
2

Я создаю простую викторину приложение, но я застрял на то, чтобы конструктор объекта ошибки является Uncaught TypeError: Question.pushQuestion не является функцияЯ получаю сообщение об ошибке Uncaught TypeError?

function Question(question){ 
    this.question = []; 
} 

Question.prototype.pushQuestion = function(question){ 
    this.question.push(question); 
} 

var question1 = Question("is 1 = 1 ?"); 
Question.pushQuestion(question1);//error 
+2

Неясно мне, что вы пытаетесь сделать Вот. Вы ожидаете, что каждый экземпляр «Вопрос» будет иметь свой собственный список вопросов? Или вы ожидаете там только одного главного списка вопросов? – apsillers

ответ

4
var question1 = new Question("is 1 = 1 ?"); 

Вы пропустили new ключевое слово.

Кроме того, здесь вы создаете экземпляр вашего объекта:

var question1 = Question("is 1 = 1 ?"); 

Таким образом, вы должны использовать question1 для того, чтобы получить доступ к любому методу из цепочки прототипов, например,

question1.pushQuestion('How are you doing?');

+0

thnx vv много я буду отмечать это как правильный ответ :) –

1

При определении функции на прототипу объекта, вы можете вызвать его, вызвав функцию на новом-эд до экземпляра этого объекта.

function Question(question){ 
    this.question = []; 
} 

Question.prototype.pushQuestion = function(question){ 
    this.question.push(question); 
} 

var question1 = new Question("is 1 = 1 ?"); 
question1.pushQuestion(question1); 

Что вы пытаетесь достичь? Потому что я уверен, что вы не хотите, чтобы сам вопрос переместился в question.list.

1

Похоже, вы пытаетесь создать список вопросов. Я хотел бы подойти так:

function QuestionList() { 
    this.questions = []; 
    this.counter = 0; 
} 

QuestionList.prototype.pushQuestion = function (question) { 
    this.questions.push(question); 
} 

var questionList = new QuestionList(); 

questionList.pushQuestion("is 1 = 1 ?"); 
questionList.pushQuestion("is 1 = 2 ?"); 

questionList.questions // [ "is 1 = 1 ?", "is 1 = 2 ?" ] 

Вы можете написать новый метод, чтобы получить следующий вопрос в списке:

QuestionList.prototype.getNextQuestion = function (question) { 
    return this.questions[this.counter++]; 
} 

questionList.getNextQuestion(); // "is 1 = 1 ?" 
questionList.getNextQuestion(); // "is 1 = 2 ?" 

DEMO

Смежные вопросы