2013-05-30 2 views
0

"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이 질문의 실제 텍스트를 표시 얻을 수 있습니까 ?? (내가 가진 코드는 지금 분명 !! 작동하지 않습니다)

그러나이 예제가 제대로 작동 나던 : 나는 질문라는 클래스를 생성하고 여기에 코드입니다 :

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

가 동적 설정이 연산자를 사용하여 오브젝트의 속성에 대한 값을 검색 할 수

답변

1

이것은 당신이 잘 이해 될 때까지 할 열심히 많은 일을 할 것입니다 프로그래밍에서 매우 중요한 개념이며, 그것은이다 : 정수로 질문 번호를 유지

, 함수는 것 일부 기초로 시작하지 않고 설명하기 매우 어려운 :

은 여기에서 일어나고있는 것은 그래서 매우 간단한 예제를 시작할 수 있습니다, 클래스보다는 평범한 구식 Object에 대해 이야기하는 것이 가장 쉬운 방법입니다 :

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

Object을 사용하면 미리 number이 존재한다고 말할 필요가 없으며 설정시 생성됩니다. 자, 어느 쪽이든 question1.number라고 말하면 분명히 1이됩니다. 1 : 무슨 일이 일어나고있는, 그러나 첫번째 question1하면, 다음 .number는 그 값에 저장된 특성number에 저장된 값을 가져옵니다 ({ number: 1 } 임) 변수question1에 저장값을 가져옵니다이다.

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를 가진 개체입니다 그중 하나 인 answersa, b, c, dcorrect의 5 가지 속성을 가진 개체입니다.이것은 다음과 같이 쓸 수도 있습니다 :

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"b" 값을 가져옵니다.

또한 this이 (가 기반이되는 자바 스크립트) ActionScript의 특별한 의미를 가지고 특별한 변수임을 알아야한다 : 그것은 은 크게 당신이 작성하는 코드가 내부 때의 객체를 참조 : "글로벌"코드 (function 안에 없음)의 경우 var은이 객체에 속성을 추가합니다. var number = 2;this.number = 2은 여기에서 동일합니다. (당신이 function에있을 때이 그렇게 조심, this 때로는 아주 이상한 방법으로, 다른이 작동, 하지 사실이다!)

이제 당신은 무슨 일이 일어나고 있는지보기 시작할 수 있습니다 당신이 [] 사용하는 경우, 예를 들어, 대신 question1.number이 아닌 경우 String값이 인 속성 이름을 전달하면 컴파일 할 때가 아니라 실행하는 동안 얻을 수있는 속성을 변경할 수 있습니다 ("runtime"vs. "compiletime "). 그러나 을 사용하면 . 구문으로 참조 할 수없는 이름으로 속성을 가져올 수 있습니다. 당신이 this["Qu" + QuNoLoad.toString() + ".QuNo"]을 쓸 때

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

그래서, 당신은 예를 들어, 당신은 존재하지 않는 포함하는 정확한 이름, .와 속성을 얻기 위해 노력하고있다 "Qu2.QuNo" 같은 이름을 만들! 다음과 같은 작업을 수행하려고했는데 : Qu2.QuNothis["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 
    } 
} 

:

나는 이런 식으로 뭔가를 들어, 당신이 값 목록을 저장하는 하나의 이름을 사용할 수 있도록 존재하는 배열을 사용하는 것입니다,하지만 말없이 떠나한다 배열에 대해 할 수있는 일이 많으므로 시간이 지나면 그 내용을 읽으십시오.

+0

감사합니다. 매우 명확한!! – user2434923

2

당신 같은 대괄호에게 [] 연산자를 사용하여 이름 변수를 참조 할 수있다.

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

감사합니다. – user2434923

+0

하지만 새로운 예제 (위)가 작동하지 않습니다 !!? – user2434923

+0

변수 이름에'.' 마침표를 사용할 수 없습니다. 이것이 회원이라면, 다음과 같이하면됩니다 :'This [ "Qu"+ QuNoLoad.toString()]. ​​Qu '기존 질문을 확장하는 대신 새로운 질문을하십시오. –

관련 문제