(AS3)關於arguments

1、官方說明html

點擊訪問app


2、使用心得函數

arguments包含了當前執行方法的參數,注意,不包含默認參數spa

arguments能夠全局訪問,能夠在任何方法裏訪問,除此以外,在定義變量的時候或者初始化的時候是不能訪問的。code

arguments本質上是一個Array的實例,可使用任何Array的方法,不過又比Array多了一個屬性:callee,這個屬性表示當前正在執行的方法的引用,好比你在某個方法test下斷點,當斷點到此處的時候,callee===test。orm

arguments的每一個實例都是不一樣的,也就是說,執行到不一樣的方法,存在不一樣的arguments實例,不過你能夠將它們的實例保存下來,這些實例之間並不會產生衝突。htm


3、注意事項對象

特別要說明的是,關於arguments.length,先看代碼:blog

 1 function test1(p1:int, p2:int)
 2 {
 3     trace(arguments.length)
 4     trace(arguments)
 5 }
 6 
 7 function test2(p1:int, p2:int = 400)
 8 {
 9     trace(arguments.length)
10     trace(arguments)
11 }
12 
13 test1(100,200)
14 test2(300)
15 
16 //output:
17 2
18 100 200
19 1
20 300

test2有一個默認參數,但在執行時,arguments並同有把這個默認參數算在裏面。隊列


4、實際應用

  1. 保存方法的詳細信息
    最近我在實現一個這樣的功能,某個類的方法要按隊伍的方式逐個調用,由於每一個方法調用的時間不肯定,但調用完成後會有回調,因此個人問題就轉換爲把函數信息和參數保存下來。
    固然,能夠用最簡單的方法把每一個方法的引用和參數逐個用代碼寫下來,而後保存到一個隊列裏,不過我想找到一個更簡單的方法。
    arguments就能夠解決個人問題,arguments.callee就是函數的引用,而它自己又包含了方法的參數信息,這樣的話,我只須要保存在Object就能夠。
    像這樣:var funcObj = {func:arguments.callee, args:arguments}; queue.enqueue(funcObj);
  2. 移除匿名方法監聽
    有時可能爲了方便,並且是一次性的事件監聽,其實就不必再寫成一個成員方法,好比如下:
    addEventListener(Event.ADDED_TO_STAGE, function(e:Event)
    {
      removeEventListener(Event.ADDED_TO_STAGE, arguments.callee)
    })

 


5、雜項

這裏還用到了Function這個對象的apply方法,關於這個方法,能夠看一上官方的文檔,點擊查看

獲取當前正在執行的方法名,網友的方法,點擊查看

(new Error()).getStackTrace().split("/")[1].split("(")[0]
相關文章
相關標籤/搜索