不二如是 发表于 2017-7-8 19:42:20

0 1 5 4 ★ 无敌小“arguments”

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



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

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

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

主要有以下三个玩法:




[*]实现重载


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

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

比如,最简单的一种方式,根据参数的个数进行重载,代码如下所示:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>鱼C出品</title>
</head>
<body>
<script>
    function showLenght(){
      switch(arguments.length)
      {
            case 0:
                document.write("长度为0");
                break;
            case 1:
                document.write("长度为1");
                break;
            case 2:
                document.write("长度为2");
                break;
            case 3:
                document.write("长度为3");
                break;
            default:
                document.write("超出可预测范围");
                break;
      }
    }

    showLenght('Welcome','to','Fishc');
</script>
</body>
</html>


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

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

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

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


[*]同数组下标访问实参


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

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

来段代码:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>鱼C出品</title>
</head>
<body>
<script>
    function showLenght(){
       var test = "";
       for(var i = 0 ; i < arguments.length; i++)
       {
         test += arguments + ' ';
       }
       document.write(test);
    }

    showLenght('Welcome','to','Fishc');
</script>
</body>
</html>


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


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

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

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


[*]属性callee指向自己


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

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

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

也来段代码看一看:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>鱼C出品</title>
</head>
<body>
<script>
    function getSum(i){
       if(i == 1)
       {
         return 1;
       }
       else{
         return i+arguments.callee(i-1);
       }

    }
    document.write(getSum(100));

</script>
</body>
</html>


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



友情提示:

**** Hidden Message *****



这位鱼油,如果喜欢本系列Js帖子,请订阅 专辑☞(传送门)(不喜欢更要订阅{:10_297:} )

勾小鱼Melody 发表于 2017-7-10 19:00:17

想知道是如何动态生成列表的呢?就是每次有新发出来的帖子,列表就会自动多一行。静态的HTML能做到吗?
谢谢答复!{:10_256:}

alltolove 发表于 2017-7-10 19:04:38

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

那得用ajax技术

勾小鱼Melody 发表于 2017-7-10 19:11:12

alltolove 发表于 2017-7-10 19:04
那得用ajax技术

那有在出ajax的教程吗~

alltolove 发表于 2017-7-10 19:18:56

勾小鱼Melody 发表于 2017-7-10 19:11
那有在出ajax的教程吗~

楼主可能会出吧{:10_312:}

TCY 发表于 2019-6-7 14:23:20

xxxx...............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................I love JS!

tianyuan 发表于 2020-4-28 16:55:04

{:10_277:}

一笙彤 发表于 2020-6-13 11:18:14

.3

败者食尘 发表于 2021-1-18 15:27:45

111

omg123460 发表于 2021-10-15 13:58:00

1

碉堡的小小 发表于 2021-12-28 15:48:39

1

jack6666 发表于 2022-10-6 19:47:59

1

dd8556471 发表于 2022-10-21 14:20:55

謝謝提供資料

peanutfs13 发表于 2023-9-12 17:16:20

1

孙忠亮 发表于 2023-10-31 16:06:07

1
页: [1]
查看完整版本: 0 1 5 4 ★ 无敌小“arguments”