Простая ОО структура для приложения викторины - минимизация повторений - улучшение навыков ОО - PullRequest
0 голосов
/ 20 мая 2011

Я делаю простое приложение для викторины, в котором есть несколько вопросов.У этого нет никакого конца, и все взаимодействие происходит на одной странице.мои объекты расположены следующим образом -

q1Choices = {
    "question": "some question",
    "resultsToRemoveIfAnswer1": [2, 4, 6],
    "resultsToRemoveIfAnswer2": [1, 3, 5]
 };
 q2Choices = {
     "question": "another question",
     "resultsToRemoveIfAnswer1": [5, 6],
     "resultsToRemoveIfAnswer2": [1, 2, 3, 4]
 };
 q3Choices = {
     "question": "a third question",
     "resultsToRemoveIfAnswer1": [3, 4],
     "resultsToRemoveIfAnswer2": [1, 2]
 };

За один раз появляется один вопрос, который имеет два возможных ответа - при нажатии на ответ появляется другой вопрос, который заполняется из соответствующего объекта.

Для этого у меня есть переменная-счетчик и массив с объектами

var currentQuestion = 0;

var questionArray = [q1Choices, q2Choices, q3Choices];

Я вижу, что в этом коде много повторений, и я искал уборщика,более ремонтопригодный, более оригинальный способ сделать это.

Кто-нибудь может дать мне какие-нибудь указатели?

1 Ответ

1 голос
/ 20 мая 2011

Почему вы не используете только массивы?

questions = [
    [
        "some question", //question
        [2,4,6], //resultsToRemoveIfAnswer1
        [1, 3, 5] //resultsToRemoveIfAnswer2
    ],
    [
        "another question",
        [5, 6],
        [1, 2, 3, 4]
    ],
    ...
]

, тогда в questions элементах вы можете получить доступ к ключу question в качестве индекса 0, resultsToRemoveIfAnswer1 в качестве индекса 1, resultsToRemoveIfAnswer2как индекс 2.

Если вы не хотите полагаться на бессмысленные числовые индексы, объявляйте константы и используйте их

resultsToRemoveIfAnswer1 = 1
questions[0][resultsToRemoveIfAnswer1]

Более OO-ориентированный образец:

function Questionary(){
    const question = 0
    const resultsToRemoveIfAnswer1 = 1
    const resultsToRemoveIfAnswer2 = 2
    this.questions = [
        [
            "some question",
            [2,4,6],
            [1, 3, 5]
        ],
        [
            "another question",
            [5, 6],
            [1, 2, 3, 4]
        ],
        ...
    ];
    this.currentQuestion = 0;
}

//method example
Questionary.prototype.skipQuestion = function() {
    return ++this.currentQuestion;
}

и вы можете пойти глубже, добавив Question Объект с text, resultsToRemoveIfAnswer1, resultsToRemoveIfAnswer2 и т. Д. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...