【问题标题】:AS3 dynamic object properties inside another object另一个对象内的 AS3 动态对象属性
【发布时间】:2013-05-07 15:43:03
【问题描述】:

我想创建一个内部有嵌套对象的对象,其对象内部有对象,就像这个简单的结构:

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 = {}; 也无济于事。我该怎么做?

【问题讨论】:

  • 你不能让运动成为一个数组而不是一个对象吗?
  • 这个例子只是我真正需要做的一个简化的方式,所以我需要它们成为我完整代码中的对象。谢谢
  • 你可以有{ exercise : { data: ..., otherdata: ..., questions: []} }

标签: actionscript-3 oop object declaration


【解决方案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;

【讨论】:

  • 看起来很有趣,但我不明白,你能解释一下吗?谢谢
  • 您可以将 exercise 对象留空,代码测试对象 question?(其中 ? 是索引)是否存在于 exercise 中,如果不存在,则不会创建它得到任何错误。
【解决方案2】:

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

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);
}

【讨论】:

  • 当然可以,但是我的真实代码的结构更复杂,所以我的例子只是一个有代表性的最小例子。我真的需要他们成为对象。感谢您的回答
【解决方案3】:

要从 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: {}};

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

【讨论】:

  • 谢谢我已经知道了,这是一个更好的方法,我在我的真实代码中就有这样的方法。但是我的问题在于question0, question1, question2, question3..... 部分。不过感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-22
  • 1970-01-01
相关资源
最近更新 更多