Flex的事件(六)
生活随笔
收集整理的這篇文章主要介紹了
Flex的事件(六)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用嵌套的函數作為事件監聽器<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
???????? ???????? 如果你傳遞給addEventListener()方法的監聽器是一個嵌套的內部函數,那就不要將useWeakReference參數的值設定為true。例如:
?
???????? 除了將事件監聽器函數的名字傳遞給addEventListener()方法,你還可以定義一個內部函數(也可以理解為閉包)。?
???????? 在下面的例子中,當按鈕被點擊,嵌套的函數就被調用:?
| <!-- 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> |
?
???????? 閉包函數除了可以在對象或類中創建,還可以在一個方法被調用時創建。閉包函數將保持它被定義時的范圍。當它作為一個參數或一個返回值被傳遞到不同的范圍時,將產生有趣的結果。?
???????? 例如,下面的代碼創建了兩個函數。叫做foo()的函數返回一個叫做retArea()的用來計算矩形面積的嵌套函數,叫做bar()的函數調用foo()并且將它返回的閉包函數保存在一個叫做myProduce的變量中,bar()還定義了叫做x的本地變量,并賦值2。當閉包函數myProduct()被調用時,它繼續持有在foo()中定義的變量x。bar()函數將返回的數值顯示在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作為最后一個參數的值將導致意料之外的結果。對于Flex,內部函數其實就是一個對象,并且可以被垃圾回收釋放。如果你將useWeakReference參數設定為true,就像上面例子里展示的那樣,那么將不會有內部函數的長久的引用,在下一次回收時,可能會釋放這個函數,并且當事件再次被觸發時,函數將無法被調用。?
???????? 如果還有內部函數的其他引用,那么垃圾回收就不會釋放它。?
?????? 類級的成員函數將不會被垃圾回收,這樣你就可以將useWeakReference參數設定為true。轉載于:https://blog.51cto.com/flexria/154533
總結
以上是生活随笔為你收集整理的Flex的事件(六)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用纸作出来的艺术品 漂亮!
- 下一篇: 管理和配置客户端访问服务器