2016-08-08 19 views
0

Am Ende des Tages, ich brauche eine JavaScript-Funktion mir schaffen zu helfen:Wie erstellen Sie eine serialisierte Menge von Objekten, die in einer anderen verschachtelt sind?

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

Ich habe im Grunde eine Frage der Klasse, die Fragen mit Fragetext hat, und eine beliebige Anzahl von Antworten. Fragen sind in Ordnung. Answers ist eine eigene Klasse, bei der jede Antwort eine beliebige Anzahl von Antworten mit Antworttext und einem Symbol enthält. Ich bin mir nicht sicher, ob ich es richtig erklärt habe, aber hier ist mein Versuch, die Funktion dieser Frage Objekt zu erstellen:

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) 

Aber das schafft unnötige Antwort Variablen. Ohne zu wissen, wie groß die Antwort auf die Frage sein wird, wie erstelle ich eine Funktion, die eine Frage mit Antworten auf einmal erstellen kann?

Antwort

0

Sie verwenden var der Variablen des Arrays jedes Mal neu zu definieren? Außerdem haben Sie konsistent inkonsistente Verwendung der ungültigen Syntax.


Wie auch immer, es ist gut, dass Sie objektorientiert denken. Ich denke so: Das "endgültige" Ergebnis, das Sie versuchen zu sehen, liefert eine Frage und einige Antworten. Es scheint angemessen, dies zu einem Objekt zu machen, nennen Sie es ein QA Objekt. Auf diese Weise können Sie im Wesentlichen eine Instanz dieses geschäftslogikspezifischen Paars erstellen. Sie können diese Instanzen problemlos & übergeben.

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

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

Nachdenken über weitere Umsetzung (Sie haben gedacht, das durch den ersten Schritt übersprungen), denke ich an einer Art von Objekt eine Instanz einer Frage zu stellen, und eine Art von Objekt eine Instanz darstellen eine Antwort (das sind Entitäten). Darüber hinaus an die Zukunft denken, kann ich eine Art Sammlung Schnittstelle wollen (es wirkt tatsächlich als Datenerfassungs Fabrik) zu ‚schaffen‘ Antwort Kollektionen:

/** 
* 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; 
}; 

Im Anschluss an diese/eine ähnliche Implementierung lesbar & portablen Code

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 

Am Ende des Tages: instanziiert, was Sie wollen, wenn Sie Objekte verwenden müssen & new nicht benutzerdefiniert, können Sie mit der einfacheren Objekt Lösung gehen Sie einfach:

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

Sie müssen Variablen, andere als die Hauptwurzel man eigentlich gar nicht initialisiert werden:

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