(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]
相关文章
相关标签/搜索