另一个对象内的AS3动态对象属性

时间:2013-05-07 15:43:04

标签: actionscript-3 oop object declaration

我想创建一个对象,其中包含嵌套对象,其对象中包含对象,就像这个简单的结构:

var obj:Object = {
  exercise : {
    question0 : {}
    question1 : {}
    question2 : {}
    question3 : {}
  }
};

然后使用XML的内容动态地为这些对象分配它们的属性:

for (var i:uint=0; i<4; i++) {

  obj.exercise["question"+i].original = varXML.texts.exercise.question[i].original.@text;
  obj.exercise["question"+i].example = varXML.texts.exercise.question[i].example.@text;
  obj.exercise["question"+i].answer = varXML.texts.exercise.question[i].answer.@text;
}

此代码效果很好;这就是我所知道的方式。 但是question对象的数量是动态的,我无法找到定义主对象结构的方法。所以我不希望从头开始声明question0question1question2question3question4等(没有我得到错误) ) 只是这样做:var objSenTense:Object = {};也没有帮助。

你能帮帮我吗?我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

为什么不使用一系列问题?

var obj:Object = {
  exercise : {
    questions:[]
  }
};

for (var i:uint=0; i<4; i++) {

    var question:Object = {};
    question.original = varXML.texts.exercise.question[i].original.@text;
    question.example = varXML.texts.exercise.question[i].example.@text;
    question.answer = varXML.texts.exercise.question[i].answer.@text;
    obj.exercise.questions.push(question);
}

答案 1 :(得分:1)

要从xml获取问题数量,请使用以下代码:

var length = varXml.texts.exercise.question.length();

for (var i:uint = 0; i < length; i++) { ...

在循环内部,您可以根据需要定义尽可能多的question个对象:

obj.exercise["question"+i] = {};

因此obj的初始结构可能就像这样简单:

var obj = {exercise: {}};

虽然将数组用于问题更有意义,但不是对象。

答案 2 :(得分:1)

您可以在编辑对象之前强制创建对象:

if (!obj.exercise.hasOwnProperty("question"+i))
{
   obj.exercise["question"+i] = {};
}
obj.exercise["question"+i].original = varXML.texts.exercise.question[i].original.@text;
obj.exercise["question"+i].example = varXML.texts.exercise.question[i].example.@text;
obj.exercise["question"+i].answer = varXML.texts.exercise.question[i].answer.@text;