我需要創建一個變量:動態變量名稱
var numDots0:Number=0;
但是,當一個按鈕被點擊變量numDots0
變得numDots1
,然後numDots2
在第二次點擊,等等。然後我需要能夠獲取這個新的變量名稱並在一個函數中使用它。
我需要創建一個變量:動態變量名稱
var numDots0:Number=0;
但是,當一個按鈕被點擊變量numDots0
變得numDots1
,然後numDots2
在第二次點擊,等等。然後我需要能夠獲取這個新的變量名稱並在一個函數中使用它。
這是一個非常,非常奇怪的要求,但不管怎麼說:
您可以使用鍵名稱的對象來存儲屬性,然後更改:
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.
我看絕對沒有好處或需要這一點,所以我強烈建議考慮看看你想要做什麼,並確保它是有道理的,沒有不同的應用程序。
我很肯定你對你試圖解決的問題採取錯誤的態度。動態變量名稱不是您在最佳實踐手冊中閱讀的內容。
反正回答在AS2你的問題,你可以使用命令EVAL這將評估字符串爲ActionScript,所以你會使用類似:
function onClicked(e:MouseEvent):void
{
counter++;
eval("var numDots" + counter +"+:Number=0;");
}
在AS3該命令已被刪除(,因爲它導致糟糕的編碼實踐 - 就像你正在嘗試做)的事情,但有人實施了一個AS3評估:
有了這個評估的庫添加到您的項目,並添加以下上面的代碼片段:
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);
}
答案是不做你正在嘗試做的,並使用一個數組,散列或載體來代替。給我們多一點背景知識,或者你想達到你想要的目標的原因,以及爲什麼你可能會相信你需要一個這樣的動態變量名稱。你不應該使用evals或任何在運行時改變變量名稱的東西,因爲編程之神會讓你失望。即,您的程序將會中斷,而當它發生時,調試肯定會變得更加困難。
如果你確定這是你想要做的,那麼我錯了,哈哈。祝你好運!
我真的懷疑這實際上是你需要的。改變名稱的變量並不會導致可讀代碼。你想達到什麼目的? – 2012-04-18 01:44:03
是的,請說明,上下文將幫助您收到更好的建議。 – DingoEatingFuzz 2012-04-18 02:19:19