Actionscript 3 如何合并两个变量的内容

Actionscript 3 如何合并两个变量的内容,actionscript-3,flash,Actionscript 3,Flash,我有许多字符串变量,以“Question”开头,然后以数字结尾。(“问题1”) 每个变量都有一个问题(“它说了多少次E?”) 舞台上有一个可编辑的文本框,用户可以在其中键入他希望在不同文本框中显示的问题编号。("1") 当用户单击按钮时,我希望文本框中显示问题1的文本。 我的代码如下所示: var Question1:String = "How many times does it say E?" ; var Question2:String = "How many times does it

我有许多字符串变量,以“Question”开头,然后以数字结尾。(“问题1”) 每个变量都有一个问题(“它说了多少次E?”) 舞台上有一个可编辑的文本框,用户可以在其中键入他希望在不同文本框中显示的问题编号。("1") 当用户单击按钮时,我希望文本框中显示问题1的文本。 我的代码如下所示:

var Question1:String = "How many times does it say E?" ;
var Question2:String = "How many times does it say B?" ;
var Question3:String = "How many times does it say A?" ;

myButton.addEventListener(MouseEvent.CLICK, displayQuestion);

function displayQuestion(event:MouseEvent):void
{
    var QuestionNumber:Number = Number(userInputQuestionNumber.text);

    textBoxDisplayQuestion.text= Question(QuestionNumber);
}
如何让textBoxDisplayQuestion显示问题的实际文本?? (我现在的代码显然不起作用!!)

但这个例子似乎不起作用:我创建了一个名为Question的类,下面是代码:

import Question;
var QuNoLoad:Number;
var Qu1:Question = new Question(1,"how","yes","no","maybe","so","AnsB","AnsA");

trace(Qu1.QuNo, Qu1.Qu, Qu1.AnsA,Qu1.AnsB, Qu1.AnsC, Qu1.AnsD, Qu1.CorAns, Qu1.FaCorAns);

//the following is the code for the button
loadQu.addEventListener(MouseEvent.CLICK, loadQuClick);

function loadQuClick(event:MouseEvent):void
{
    //this sets the variable "QuNoLoad" with the contents of the "textBoxQuLoad"
    //imagine the user inputed "1"
    QuNoLoad=Number(textBoxQuLoad.text);

    //this SHOULD!! display the contents of "Qu1.Qu"
    textQu.text= this["Qu"+QuNoLoad.toString()+".Qu"]
    //and when i traced this statment the value was "undefined"
}

为什么???

您可以使用方括号
[]
运算符按名称引用变量,例如:

this["Question" + QuestionNumber.toString()]
可以使用此运算符动态设置和检索对象属性的值

将问题编号保持为整数,则函数为:

var Question1:String = "How many times does it say E?" ;
var Question2:String = "How many times does it say B?" ;
var Question3:String = "How many times does it say A?" ;

function displayQuestion(event:MouseEvent):void
{
    var QuestionNumber:uint = uint(userInputQuestionNumber.text);

    textBoxDisplayQuestion.text = this["Question" + QuestionNumber.toString()];
}

您可以使用方括号
[]
运算符按名称引用变量,例如:

this["Question" + QuestionNumber.toString()]
可以使用此运算符动态设置和检索对象属性的值

将问题编号保持为整数,则函数为:

var Question1:String = "How many times does it say E?" ;
var Question2:String = "How many times does it say B?" ;
var Question3:String = "How many times does it say A?" ;

function displayQuestion(event:MouseEvent):void
{
    var QuestionNumber:uint = uint(userInputQuestionNumber.text);

    textBoxDisplayQuestion.text = this["Question" + QuestionNumber.toString()];
}

这是编程中的一个非常基本的概念,在你理解它之前,它会使很多事情变得更加困难,如果不从一些基础开始,很难解释:

这里发生的事情最容易用普通的
对象而不是类来讨论,所以让我们从一个非常简单的例子开始:

var question1:Object = new Object();
question1.number = 1;
请注意,使用
对象
时,您不必说
编号
提前存在,它在设置时创建。现在,当你说
question1.number
时,很明显你得到了1。然而,首先
question1
获取存储在变量
question1
(即
{number:1}
)中的值,然后
.number
获取存储在该值中的属性
number
中的值:
1

为了节省一些输入,您可以使用称为“对象文字”的速记:

现在,让我们尝试一个更复杂的对象:

var question1 = {
   number: 1,
   text: "How many times does it say A?",
   answers: {
       a: 1,
       b: 2,
       c: 3,
       d: 4,
       correct: "b"
   }
};
现在,
问题1
是一个具有3个属性的对象,其中一个,
回答
,是一个具有5个属性的对象:
a
b
c
d
更正
。这也可以写成:

var question1 = new Object();
question1.number = 1;
question1.text = "How many times does it say A?";
question1.answers = new Object();
question1.answers.a = 1;
question1.answers.b = 2;
question1.answers.c = 3;
question1.answers.d = 4;
question1.answers.correct = "b";
现在应该很清楚为什么存在文本语法了

这一次,如果你说
question1.answers.correct
你得到
“b”
:首先
question1
得到
{number:1,
..
}
值,然后
.answers
得到
{a:1,b:2,
..
}
值,最后
.correct
得到

您还应该知道,
这个
是一个特殊的变量,在ActionScript(以及它所基于的JavaScript)中具有特定的含义:当您编写的代码在其中时,它广义上指的是中的对象:对于“全局”代码(而不是在
函数中
),
var
将属性添加到此对象:
var number=2
this.number=2
在这里是相同的。(当您使用
函数时,这是正确的,
在那里的行为不同,有时非常奇怪,所以要小心!)

现在,您可能开始看到发生了什么:当您使用
[]
时,例如,
question1[“number”]
,而不是
question1.number
,您将要获取的属性名称作为
字符串
传递,这意味着您可以在运行时更改获得的属性,而不是在编译时(“运行时”与“编译时”),但它还可以让您获得使用
语法无法引用的名称的属性

var strange = {
    "a strange name? That's OK!": 1
};
trace(strange["a strange name? That's OK!"]);
因此,当您编写
这个[“Qu”+qunload.toString()+“.QuNo”]
时,您创建了一个类似
“Qu2.QuNo”
的名称,例如,您试图获得一个包含该确切名称的属性,
,而该属性并不存在!你试图做的事情与:
Qu2.QuNo
可以写成
this[“Qu”+qunload].QuNo

但是,我不应该在这里不说,对于类似的东西,我会使用数组,它的存在使您可以使用单个名称来存储值列表:

var questions:Array = [ // set questions to an array with multiple questions
    new Question(...),
    new Question(...),
    ...
];

for each (var question:Question in questions) { // Look at each question in the array
    if (question.QuNo == textBoxQuLoad.text) { // If this is the right question
        loadQuestion(question);
        break; // Found it, stop looking at each question by "breaking out" of the for each
    }
}

使用数组可以做的事情还有很多,所以有时间的时候请仔细阅读它们。

这是编程中一个非常基本的概念,它会让很多事情在你理解它之前变得更加困难,如果不从一些基础工作开始,就很难解释:

这里发生的事情最容易用普通的
对象而不是类来讨论,所以让我们从一个非常简单的例子开始:

var question1:Object = new Object();
question1.number = 1;
请注意,使用
对象
时,您不必说
编号
提前存在,它在设置时创建。现在,当你说
question1.number
时,很明显你得到了1。然而,首先
question1
获取存储在变量
question1
(即
{number:1}
)中的值,然后
.number
获取存储在该值中的属性
number
中的值:
1

为了节省一些输入,您可以使用称为“对象文字”的速记:

现在,让我们尝试一个更复杂的对象:

var question1 = {
   number: 1,
   text: "How many times does it say A?",
   answers: {
       a: 1,
       b: 2,
       c: 3,
       d: 4,
       correct: "b"
   }
};
现在,
问题1
是一个具有3个属性的对象,其中一个,
回答
,是一个具有5个属性的对象:
a
b
c
d
更正
。这也可以写成:

var question1 = new Object();
question1.number = 1;
question1.text = "How many times does it say A?";
question1.answers = new Object();
question1.answers.a = 1;
question1.answers.b = 2;
question1.answers.c = 3;
question1.answers.d = 4;
question1.answers.correct = "b";
应该很清楚为什么存在文本语法