如何创建嵌套在另一个对象中的序列化对象集?

时间:2016-08-08 04:38:37

标签: javascript oop object

在一天结束时,我需要一个javascript函数来帮助我创建:

object question[0]= {questionText ,Answer[{answerText1, icon1}, answerText2, icon2},.....]}

我基本上有一个问题类,其中包含问题文本和任意数量的答案。问题是有序的。答案是一个自己的类,每个答案都有任意数量的答案,答案文本和图标。我不确定我是否正确地宣布了它,但这是我尝试创建此问题对象的函数:

function Question(qText, A) {
    this.questionText = qText;
    this.Answer = A;    
}
function Answer(aText, icon) {
    this.answerText = aText;
    this.icon= icon;
}

var AnswerForQuestion1[0]= new Answer {"Male", MaleIcon}
var AnswerForQuestion1[1]= new Answer {"Female", FemaleIcon}]
var question[0]= new Question ("What's your Gender?",AnswerForQuestion1)

但这会产生不必要的答案变量。在不知道问题的答案有多大的情况下,如何创建一个可以立即创建问题的函数?

2 个答案:

答案 0 :(得分:0)

您不需要实际初始化变量,而不是主根变量:

var questions = [
    new Question ("What's your Gender?", [
        new Answer("Male", MaleIcon),
        new Answer("Female", FemaleIcon)
    ]),
    new Question(...)
];

答案 1 :(得分:0)

您每次使用var重新定义数组的变量?此外,您始终不一致地使用无效语法。

无论如何,你认为面向对象很好。我想是这样的:" final"你试图看到的结果提供了一个问题和一些答案。将它作为一个对象似乎是合适的,称之为QA对象。这样,您基本上可以创建该业务逻辑特定对的实例。你可以轻松地传递这些实例。可以理解的。

function QA(question, answerCollection) {
    this.question = question;
    this.answerCollection = answerCollection;
};

QA.prototype.getQuestion = function() { }; //whatever

考虑进一步实施(你已经想到这一点,跳过第一步),我想到某种对象来表示问题的实例,以及某种对象来表示答案的实例(这些被称为实体)。另外,考虑到未来,我可能想要某种集合界面(它实际上充当数据收集工厂)来创建'回答集合:

/**
 * Entities
 */

function Question() {
    this.question = this.icon = NULL;
};

Question.prototype.setQuestion = function() { }; //whatever

function Answer() {
    this.answer = this.icon = NULL;
};

Answer.prototype.setAnswer = function() { }; //whatever

/**
 * Factory
 */

var AnswerCollectionFactory = {};

AnswerCollectionFactory.build = function(arr) {
    var tmpAswer, collection = []

    for(var key in arr) {
        tmpAswer = new Answer();
        tmpAswer.setAnswer(arr[key].answer);
        tmpAswer.setIcon(arr[key].icon);

        collection.push(tmpAnswer);
    }

    return collection;
};

遵循这个/类似的实现,可读&可移植代码实例化你想要的东西:

var question = new Question;
question.setQuestion('What\'s your gender?');
question.setIcon(); //whatever

var answerCollection = AnswerCollection.build([
    {answer: ..., icon: ...},
    {answer: ..., icon: ...}
]);

new QA(question, answerCollection); //there you ago

在一天结束时:如果您不需要使用用户定义的对象& new,您可以使用更简单的对象解决方案:

var qa = {
    question: {question: ..., icon: ...},
    answers: [
        {answer: ..., icon: ... },
        {answer: ..., icon: ... }
    ]
};