鱼C论坛

 找回密码
 立即注册
查看: 2775|回复: 14

[庖丁解牛] 0 1 5 4 ★ 无敌小“arguments”

[复制链接]
发表于 2017-7-8 19:42:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 不二如是 于 2017-7-8 19:45 编辑

de9ad00dca9ce5d36046cb8de26e1c77.png


在函数代码中,使用特殊对象 arguments,程序猿兄弟就无需明确指出参数名,直接能访问到。

在JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性

arguments非常类似Array,但实际上又不是一个Array实例

主要有以下三个玩法:




  • 实现重载


  • 在JavaScript内置结构中并没有函数重载的功能,为啥呢?

    因为arguments对象能够模拟重载。


    比如,最简单的一种方式,根据参数的个数进行重载,代码如下所示:
    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4.     <meta charset="UTF-8">
    5.     <title>鱼C出品</title>
    6. </head>
    7. <body>
    8. <script>
    9.     function showLenght(){
    10.         switch(arguments.length)
    11.         {
    12.             case 0:
    13.                 document.write("长度为0");
    14.                 break;
    15.             case 1:
    16.                 document.write("长度为1");
    17.                 break;
    18.             case 2:
    19.                 document.write("长度为2");
    20.                 break;
    21.             case 3:
    22.                 document.write("长度为3");
    23.                 break;
    24.             default:
    25.                 document.write("超出可预测范围");
    26.                 break;
    27.         }
    28.     }

    29.     showLenght('Welcome','to','Fishc');
    30. </script>
    31. </body>
    32. </html>
    复制代码

    Snip20170708_113.png


    输出3,意味着arguments对象可以加载到“变量的长度”,而不需要起多个名字的方法。

    利用arguments对象实现函数重载的方式可以有几种,除了上面根据参数的个数。

    还可以根据传入参数的类型来执行不同的操作。

    也可以利用参数中特殊的参数值来进行不同的操作。


  • 同数组下标访问实参


  • JavaScript中每个函数都会有一个Arguments对象的实例arguments。

    它引用着函数的实参,而且可以用数组下标的方式来引用arguments的元素。

    来段代码:
    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4.     <meta charset="UTF-8">
    5.     <title>鱼C出品</title>
    6. </head>
    7. <body>
    8. <script>
    9.     function showLenght(){
    10.        var test = "";
    11.        for(var i = 0 ; i < arguments.length; i++)
    12.        {
    13.            test += arguments[i] + ' ';
    14.        }
    15.        document.write(test);
    16.     }

    17.     showLenght('Welcome','to','Fishc');
    18. </script>
    19. </body>
    20. </html>
    复制代码

    Snip20170708_114.png


    arguments.length为函数实参的个数。



    要注意的是:
    arguments对象并不是一数组,它也不具有数据的所有方法


    但是访问单个参数的方式与访问数组元素的方式相同argument

    所以很容易把二者搞混,其实不一样的两个东西~


  • 属性callee指向自己


  • 对象都是有自己的属性和方法的,Arguments对象也是一样。

    callee就是它的方法,这个方法用的不多,很容易被我们忽略。

    它指向的是正在被执行的Function对象,既然是指向自己,那么很容易联想到“递归”

    也来段代码看一看:
    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4.     <meta charset="UTF-8">
    5.     <title>鱼C出品</title>
    6. </head>
    7. <body>
    8. <script>
    9.     function getSum(i){
    10.        if(i == 1)
    11.        {
    12.            return 1;
    13.        }
    14.        else{
    15.            return i+arguments.callee(i-1);
    16.        }

    17.     }
    18.     document.write(getSum(100));

    19. </script>
    20. </body>
    21. </html>
    复制代码

    Snip20170708_115.png


    顺利完成,从1到100求和,不过既然是“递归”,所以实际开发中用的很少。



友情提示:

游客,如果您要查看本帖隐藏内容请回复




这位鱼油,如果喜欢本系列Js帖子,请订阅 专辑&#9758;传送门)(不喜欢更要订阅

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
睦ちゃん她爹 + 5 + 5 + 3

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-10 19:00:17 | 显示全部楼层
想知道是如何动态生成列表的呢?就是每次有新发出来的帖子,列表就会自动多一行。静态的HTML能做到吗?
谢谢答复!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-10 19:04:38 | 显示全部楼层
勾小鱼Melody 发表于 2017-7-10 19:00
想知道是如何动态生成列表的呢?就是每次有新发出来的帖子,列表就会自动多一行。静态的HTML能做到吗?
谢 ...

那得用ajax技术
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-10 19:11:12 | 显示全部楼层

那有在出ajax的教程吗~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-10 19:18:56 | 显示全部楼层
勾小鱼Melody 发表于 2017-7-10 19:11
那有在出ajax的教程吗~

楼主可能会出吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-7 14:23:20 | 显示全部楼层
xxxx...............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................I love JS!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-28 16:55:04 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-13 11:18:14 | 显示全部楼层
.3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-18 15:27:45 | 显示全部楼层
111
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-15 13:58:00 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-28 15:48:39 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-6 19:47:59 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-21 14:20:55 | 显示全部楼层
謝謝提供資料
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-12 17:16:20 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-31 16:06:07 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 21:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表