Flex的事件(六)
生活随笔
收集整理的這篇文章主要介紹了
Flex的事件(六)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
使用嵌套的函數(shù)作為事件監(jiān)聽器<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
???????? ???????? 如果你傳遞給addEventListener()方法的監(jiān)聽器是一個嵌套的內(nèi)部函數(shù),那就不要將useWeakReference參數(shù)的值設(shè)定為true。例如:
?
???????? 除了將事件監(jiān)聽器函數(shù)的名字傳遞給addEventListener()方法,你還可以定義一個內(nèi)部函數(shù)(也可以理解為閉包)。?
???????? 在下面的例子中,當按鈕被點擊,嵌套的函數(shù)就被調(diào)用:?
| <!-- events/AddingInnerFunctionListener.mxml --> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp()"> <mx:Script><![CDATA[ import mx.controls.Alert; private function initApp():void { b1.addEventListener("click", function(e:Event):void { Alert.show("The button was clicked."); } ); } ]]></mx:Script> <mx:Button id='b1' label="Click Me"/> </mx:Application> |
?
???????? 閉包函數(shù)除了可以在對象或類中創(chuàng)建,還可以在一個方法被調(diào)用時創(chuàng)建。閉包函數(shù)將保持它被定義時的范圍。當它作為一個參數(shù)或一個返回值被傳遞到不同的范圍時,將產(chǎn)生有趣的結(jié)果。?
???????? 例如,下面的代碼創(chuàng)建了兩個函數(shù)。叫做foo()的函數(shù)返回一個叫做retArea()的用來計算矩形面積的嵌套函數(shù),叫做bar()的函數(shù)調(diào)用foo()并且將它返回的閉包函數(shù)保存在一個叫做myProduce的變量中,bar()還定義了叫做x的本地變量,并賦值2。當閉包函數(shù)myProduct()被調(diào)用時,它繼續(xù)持有在foo()中定義的變量x。bar()函數(shù)將返回的數(shù)值顯示在TextInput控件中,但不是8。?
| <?xml version="1.0"?> <!-- events/FunctionReturnsFunction.mxml --> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="foo()"> <mx:Script><![CDATA[ [Bindable] private var answer:String; private function foo():Function { var x:int = int(ti1.text); function rectArea(y:int):int { // function closure defined return x * y; } return rectArea; } private function bar():void { var x:int = 2; // ignored var y:int = 4; // ignored var myProduct:Function = foo(); answer = myProduct(int(ti2.text)); // function closure called } ]]></mx:Script> <mx:Form width="107"> <mx:FormItem label="X"> <mx:TextInput id="ti1" text="10" width="37" textAlign="right"/> </mx:FormItem> <mx:FormItem label="Y" width="71"> <mx:TextInput id="ti2" text="20" width="38" textAlign="right"/> </mx:FormItem> <mx:Label id="label1" text="{answer}" width="71" textAlign="right"/> </mx:Form> <mx:Button id='b1' label="Compute Product" click="bar()"/> </mx:Application> |
?
| addEventListener("anyEvent", function(e:Event) { /* My listener function. */ }, false, 0, true) |
?
???????? 在這個例子中,如果將ture作為最后一個參數(shù)的值將導致意料之外的結(jié)果。對于Flex,內(nèi)部函數(shù)其實就是一個對象,并且可以被垃圾回收釋放。如果你將useWeakReference參數(shù)設(shè)定為true,就像上面例子里展示的那樣,那么將不會有內(nèi)部函數(shù)的長久的引用,在下一次回收時,可能會釋放這個函數(shù),并且當事件再次被觸發(fā)時,函數(shù)將無法被調(diào)用。?
???????? 如果還有內(nèi)部函數(shù)的其他引用,那么垃圾回收就不會釋放它。?
?????? 類級的成員函數(shù)將不會被垃圾回收,這樣你就可以將useWeakReference參數(shù)設(shè)定為true。轉(zhuǎn)載于:https://blog.51cto.com/flexria/154533
總結(jié)
以上是生活随笔為你收集整理的Flex的事件(六)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用纸作出来的艺术品 漂亮!
- 下一篇: 管理和配置客户端访问服务器