【问题标题】:How do you create a serialized set of objects nested within another one?如何创建一组嵌套在另一个对象中的序列化对象?
【发布时间】:2016-08-08 04:38:36
【问题描述】:

归根结底,我需要一个 javascript 函数来帮助我创建:

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

我基本上有一个问题类,其中包含问题文本和任意数量的答案。问题有条不紊。 Answers 是一个独立的类,其中每个答案都有任意数量的答案,带有答案文本和一个图标。我不确定我是否已正确声明它,但这是我尝试创建此问题对象的函数:

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)

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

【问题讨论】:

    标签: javascript oop object


    【解决方案1】:

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


    无论如何,您考虑面向对象是件好事。我认为是这样的:您试图看到的“最终”结果提供了一个问题和一些答案。使它成为一个对象似乎很合适,称之为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: ... }
        ]
    };
    

    【讨论】:

      【解决方案2】:

      你不需要实际初始化变量,除了主根:

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

      【讨论】:

        猜你喜欢
        • 2020-12-21
        • 2022-11-03
        • 2015-12-18
        • 1970-01-01
        • 2022-01-07
        • 1970-01-01
        • 1970-01-01
        • 2021-06-07
        • 1970-01-01
        相关资源
        最近更新 更多