惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
N
Netflix TechBlog - Medium
宝玉的分享
宝玉的分享
Google DeepMind News
Google DeepMind News
腾讯CDC
G
Google Developers Blog
Martin Fowler
Martin Fowler
Microsoft Security Blog
Microsoft Security Blog
Recent Announcements
Recent Announcements
爱范儿
爱范儿
Engineering at Meta
Engineering at Meta
Microsoft Azure Blog
Microsoft Azure Blog
A
About on SuperTechFans
aimingoo的专栏
aimingoo的专栏
有赞技术团队
有赞技术团队
Jina AI
Jina AI
人人都是产品经理
人人都是产品经理
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
M
MIT News - Artificial intelligence
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
美团技术团队
WordPress大学
WordPress大学
阮一峰的网络日志
阮一峰的网络日志

博客园 - Kenshin.L

[Flex]flex-htmlfilter swc complete [Flex]Adobe BrowserLabe [Flex]构建基于Flex技术的Blog程序(一) [Flex]Flex Ioc Framework - Parsley [Flex]用编程的方式来写CSS - LESS的应用(一) [Flex]Flex SDK 4(Gumbo)浅析ASDoc - ASDoc MXML应用篇 [Flex]Flex SDK 4(Gumbo)自定义皮肤 - SilverGreen(Spark) 下载 [Flex]Flex SDK 4(Gumbo)浅析ASDoc - ASDoc Tags参数篇 [Flex]Flex SDK 4(Gumbo)浅析ASDoc - Flash Builder 4配置篇 [Flex]Flex SDK 4(Gumbo)自定义皮肤 - SilverGreen(Spark和Halo)预览版 [Flex]Flex SDK 4(Gumbo)浅析SDK 4默认的Spark样式与Halo样式 [Flex]Flex SDK 4(Gumbo)更方便的自定义样式、自定义SparkSkin(三) [Flex]Flex SDK 4(Gumbo)改善的Layout和Scroller(二) [Flex]Flex SDK 4(Gumbo)改善的Layout和Scroller(一) [Flex]Flex编程注意之自动获取焦点、监听全局键盘事件 [Flex]Flex SDK 4(Gumbo)更方便的自定义样式、自定义SparkSkin(二) [Flex]Flash Builder 4 编辑器配色方案 - 黑色系 [Flex]Flex SDK 4(Gumbo)更方便的自定义样式、自定义SparkSkin(一) [RIA]HTML5怎么就成了RIA“杀手”?
[Flex]Flex编程注意之直接获取某个组件的对象(this[]用法)
Kenshin.L · 2009-07-14 · via 博客园 - Kenshin.L

详细请看:http://www.k-zone.cn/zblog/post/flex-get-a-reference-to-object.html
有这样一个需求:假如你new了一百次Button,同时这些button的id分别赋值如btn1.id = "button1"; btn2.id = "button2";以此类推。
当100个button建立后,我想直接对其第20个button进行操作,那么应该如何实现呢?

方案1:
遍历这些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 ];
这样做无疑要比第一种方式快很多倍,但是这种做法的弊端:需要建立一个哈希表,当你的数据过多的时候,无疑这个哈希表将会很大。

方案3:
我们第一不需要遍历100次button容器,第二不需要建立一个哈希表。我们只是用this[xxxx]的方式,即可取出第20个button。
具体做法:var button : Button = this[ 'button' + 20 ];即可完成操作。无论这些button在什么地方?在什么样深度的容器里面,只要是它仍在这个project里面,就可以使用this[xxx]的方式取出。
无疑这种做法是高效的,其实我们仔细看一下this[xxx]其实也是使用哈希表的方式,只不过比方案2好在,我们不需要再建立一个哈希表,这样能节省很多的内存空间。

具体请看一下第三种方法的demo:

<?xml version="1.0"?>  

<mx:Application xmlns:mx="http://www.adobe.com/2006/mx

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

</mx:Application>