• (AS3)关于arguments


    一、官方说明

    点击访问


    二、使用心得

    arguments包含了当前执行方法的参数,注意,不包含默认参数

    arguments可以全局访问,可以在任何方法里访问,除此之外,在定义变量的时候或者初始化的时候是不能访问的。

    arguments本质上是一个Array的实例,可以使用任何Array的方法,不过又比Array多了一个属性:callee,这个属性表示当前正在执行的方法的引用,比如你在某个方法test下断点,当断点到此处的时候,callee===test。

    arguments的每个实例都是不同的,也就是说,执行到不同的方法,存在不同的arguments实例,不过你可以将它们的实例保存下来,这些实例之间并不会产生冲突。


    三、注意事项

    特别要说明的是,关于arguments.length,先看代码:

     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并同有把这个默认参数算在里面。


    四、实际应用

    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)
      })

    五、杂项

    这里还用到了Function这个对象的apply方法,关于这个方法,可以看一上官方的文档,点击查看

    获取当前正在执行的方法名,网友的方法,点击查看

    (new Error()).getStackTrace().split("/")[1].split("(")[0]
  • 相关阅读:
    array with objects sort
    Vue组件之区域滚动
    ajax跨域请求问题总结
    常见contentType
    Sublime Text 3实用快捷键大全
    具有层级关系的扁平化数组转化成树形结构数组
    阿里云地图选择器
    前端解析二进制文件流并下载
    tool.js日常工具方法
    git操作
  • 原文地址:https://www.cnblogs.com/yili16438/p/3338349.html
Copyright © 2020-2023  润新知