2012-04-18 115 views
0

我需要創建一個變量:動態變量名稱

var numDots0:Number=0; 

但是,當一個按鈕被點擊變量numDots0變得numDots1,然後numDots2在第二次點擊,等等。然後我需要能夠獲取這個新的變量名稱並在一個函數中使用它。

+5

我真的懷疑這實際上是你需要的。改變名稱的變量並不會導致可讀代碼。你想達到什麼目的? – 2012-04-18 01:44:03

+0

是的,請說明,上下文將幫助您收到更好的建議。 – DingoEatingFuzz 2012-04-18 02:19:19

回答

2

這是一個非常,非常奇怪的要求,但不管怎麼說:

您可以使用鍵名稱的對象來存儲屬性,然後更改:

var obj:Object = { numDots0: 0 }; 

然後當你想更改名稱:

delete obj.numDots0; 
obj.numDots1 = 1; 

還是要容易增加你可以使用這個:

var i:int = 0; 
function increase():void 
{ 
    delete obj["numDots" + i]; 
    obj["numDots" + (++i)] = i; 
} 

要訪問:

trace(obj.numDotsX); // where X is the most recent variable name. 

我看絕對沒有好處或需要這一點,所以我強烈建議考慮看看你想要做什麼,並確保它是有道理的,沒有不同的應用程序。

+0

以及我確定你認爲我的動作不是最強的,但我會盡力解釋我試圖做什麼,併發布我的代碼。我有一個應用程序,允許您通過在網格上放置點並在點上連接時繪製形狀,我想要的是將按鈕調整爲允許創建新形狀的現有代碼。 – ejn 2012-04-18 04:04:46

+0

@ejn有許多方法可以訪問動態創建的實例,而無需將它們分配給變量,例如可以將它們添加到數組中。 – Marty 2012-04-18 04:16:58

+1

你也可以從顯示樹中獲得它們 – Luis 2012-04-18 06:20:06

0

我很肯定你對你試圖解決的問題採取錯誤的態度。動態變量名稱不是您在最佳實踐手冊中閱讀的內容。

反正回答在AS2你的問題,你可以使用命令EVAL這將評估字符串爲ActionScript,所以你會使用類似:

function onClicked(e:MouseEvent):void 
{ 
    counter++; 
    eval("var numDots" + counter +"+:Number=0;"); 
} 

在AS3該命令已被刪除(,因爲它導致糟糕的編碼實踐 - 就像你正在嘗試做)的事情,但有人實施了一個AS3評估:

http://eval.hurlant.com/

有了這個評估的庫添加到您的項目,並添加以下上面的代碼片段:

function eval(expression:String):void 
{ 
    var evaluator:com.hurlant.eval.Evaluator = new com.hurlant.eval.Evaluator(); 
    var bytes:ByteArray = evaluator.eval(expression); 
    bytes = ByteLoader.wrapInSWF([bytes]); 

    var context:LoaderContext = null 
    var loader:Loader = new Loader(); 

    loader.loadBytes(bytes, context); 
} 
0

答案是做你正在嘗試做的,並使用一個數組,散列或載體來代替。給我們多一點背景知識,或者你想達到你想要的目標的原因,以及爲什麼你可能會相信你需要一個這樣的動態變量名稱。你不應該使用evals或任何在運行時改變變量名稱的東西,因爲編程之神會讓你失望。即,您的程序將會中斷,而當它發生時,調試肯定會變得更加困難。

如果你確定這是你想要做的,那麼我錯了,哈哈。祝你好運!