如何合并两个变量的内容

时间:2013-05-30 04:05:26

标签: actionscript-3 flash

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

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"
}

为什么???

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

var question1:Object = new Object();
question1.number = 1;

请注意,对于Object,您不必提前number存在,它会在您设置时创建。现在,当你说question1.number时你得到1,显然。然而,首先question1获取存储在变量 question1{ number: 1 })中的,会发生什么,然后.number获取存储在该值中的属性 number中的值:1

要保存一些打字,您可以使用名为“对象文字”的简写:

var question1 = {
   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"
   }
};

现在question1是一个包含3个属性的对象,其中一个属性answers是一个具有5个属性的对象:ab,{{1} },cd。这也可以写成:

correct

现在应该很清楚为什么文字语法存在!

这一次,如果您说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, 1}}获取} ... .correct值,最后"b"获取this值。

您还应该知道function是一个特殊的变量,它在ActionScript(以及它所基于的JavaScript)中具有特定的含义:它广泛指的是当时的对象您正在编写的代码在内部:对于“全局”代码(不在var内),var number = 2;为此对象添加属性:this.number = 2function在此处相同。 (当你在this时,这是为真,[]在那里行为有所不同,有时以非常奇怪的方式,所以要小心!)

现在您可能会开始看到正在发生的事情:当您使用question1["number"]时,例如question1.number而不是String时,您将传递要获取的属性名称{ {1}} ,这意味着您可以在运行时更改所获得的属性,而不是在编译时(“运行时”与“编译时”相比),但也< / em>允许您使用.语法获取无法引用的名称的属性!

var strange = {
    "a strange name? That's OK!": 1
};
trace(strange["a strange name? That's OK!"]);

因此,当您编写this["Qu" + QuNoLoad.toString() + ".QuNo"]时,您创建了一个名为"Qu2.QuNo"的名称,例如,您正在尝试获取具有该确切名称的属性,包括.,但不是存在!您尝试执行的操作相当于:Qu2.QuNo可以写为this["Qu" + QuNoLoad].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
    }
}

你可以使用阵列做更多的事情,所以当你有时间时,请阅读它们。