有這樣一個需求:假如你new了一百次Button,同時這些button的id分別賦值如btn1.id = "button1"; btn2.id = "button2";以此類推。
當100個button建立後,我想直接對其第20個button進行操作,那麼應該如何實現呢?
當100個button建立後,我想直接對其第20個button進行操作,那麼應該如何實現呢?
方案1:
遍歷這些button所在的容器的,然後通過getChildAt() 或者 getChildByName()這樣的方式獲取。
這是常規的做法,這種做法的弊端:每次都需要遍歷100次button,顯然效率很慢。
遍歷這些button所在的容器的,然後通過getChildAt() 或者 getChildByName()這樣的方式獲取。
這是常規的做法,這種做法的弊端:每次都需要遍歷100次button,顯然效率很慢。
方案2:
當建立新的button後,將這個button存放到哈希表裏面,其鍵-值的設定關係:key = button.id; value = button;
即鍵裏面保存的button的id,而value裏面保存的button對象。object[ 'button20' ] = btn20;
在使用的時候,直接取得第20個button的做法:var button : Button = object[ 'button' + 20 ];
這樣做無疑要比第一種方式快很多倍,但是這種做法的弊端:需要建立一個哈希表,當你的數據過多的時候,無疑這個哈希表將會很大。
當建立新的button後,將這個button存放到哈希表裏面,其鍵-值的設定關係:key = button.id; value = button;
即鍵裏面保存的button的id,而value裏面保存的button對象。object[ 'button20' ] = btn20;
在使用的時候,直接取得第20個button的做法:var button : Button = object[ 'button' + 20 ];
這樣做無疑要比第一種方式快很多倍,但是這種做法的弊端:需要建立一個哈希表,當你的數據過多的時候,無疑這個哈希表將會很大。
方案3:
我們第一不需要遍歷100次button容器,第二不需要建立一個哈希表。我們只是用this[xxxx]的方式,即可取出第20個button。
具體做法:var button : Button = this[ 'button' + 20 ];即可完成操作。無論這些button在什麼地方?在什麼樣深度的容器裏面,只要是它仍在這個project裏面,就可以使用this[xxx]的方式取出。
我們第一不需要遍歷100次button容器,第二不需要建立一個哈希表。我們只是用this[xxxx]的方式,即可取出第20個button。
具體做法:var button : Button = this[ 'button' + 20 ];即可完成操作。無論這些button在什麼地方?在什麼樣深度的容器裏面,只要是它仍在這個project裏面,就可以使用this[xxx]的方式取出。
無疑這種做法是高效的,其實我們仔細看一下this[xxx]其實也是使用哈希表的方式,只不過比方案2好在,我們不需要再建立一個哈希表,這樣能節省很多的內存空間。
<mx:Script>
<![CDATA[
private var newFontStyle:String;
private var newFontSize:int;
public function changeStyle( s : String ) : void {
s = "button" + s;
this[ s ].setStyle( "fontSize", 20 );
}
]]>
</mx:Script>
<mx:Button id="button1" click="changeStyle('2')" label="Button 1" />
<mx:Button id="button2" click="changeStyle('1')" label="Button 2" />
<![CDATA[
private var newFontStyle:String;
private var newFontSize:int;
public function changeStyle( s : String ) : void {
s = "button" + s;
this[ s ].setStyle( "fontSize", 20 );
}
]]>
</mx:Script>
<mx:Button id="button1" click="changeStyle('2')" label="Button 1" />
<mx:Button id="button2" click="changeStyle('1')" label="Button 2" />
</mx:Application>