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

推荐订阅源

人人都是产品经理
人人都是产品经理
博客园_首页
博客园 - 三生石上(FineUI控件)
V
Visual Studio Blog
Hugging Face - Blog
Hugging Face - Blog
美团技术团队
小众软件
小众软件
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
有赞技术团队
有赞技术团队
WordPress大学
WordPress大学
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
罗磊的独立博客
V
V2EX
酷 壳 – CoolShell
酷 壳 – CoolShell
IT之家
IT之家
量子位
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Recent Announcements
Recent Announcements
M
MIT News - Artificial intelligence
阮一峰的网络日志
阮一峰的网络日志
The GitHub Blog
The GitHub Blog

博客园 - 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>