Arguments

arguments

arguments的相关知识点

  1. arguments是一个对应于传递给函数的参数的类数组对象(伪数组)。可以使用arguments.length来获得需要传递的参数的个数。arguments.length`和函数的length属性都可以实现相同的功能。

  2. arguments.length是实际传入的参数的个数,而函数的length是形参的个数。实际上就是理想和现实的区别,那这里的理想和显示分别代表的什么(arguments.lemgth还是function()).length

  3. arguments转数组使用的方法是:Array.prototype.slice.call(arguments),更加简单的写法:[].slice.call(arguments),两者是有本质上的区别的,一个知识简单的调用空数组的slice方法,没有从Arry的原型层面调用。ES6可使用Array.from()Array.from() 是个非常推荐的方法,其可以将所有类数组对象转换成数组。

  4. 修改arguments的值,在严格模式和非严格模式下会是两种不同的情况。举例如下:

    严格模式下:

    function foo(a) {  
     "use strict";
      console.log(a, arguments[0]);
      a = 10;
      console.log(a, arguments[0]);
      arguments[0] = 20;
      console.log(a, arguments[0]);
    }
    foo(1);
    

    输出:

    1 1
    10 1
    10 20
    

    非严格模式下:

    function foo(a) {
      console.log(a, arguments[0]);
      a = 10;
      console.log(a, arguments[0]);
      arguments[0] = 20;
      console.log(a, arguments[0]);
    }
    foo(1);
    

    输出:

    1 1
    10 10
    20 20
    

    结论:在严格模式下,函数中的参数与 arguments 对象没有联系,修改一个值不会改变另一个值。而在非严格模式下,两个会互相影响。

arguments的使用

arguments的创建

例子:

function Foo(){}
function Bar(){}
Foo.prototype = Object.create(Array.prototype) //拥有 Array 的所有方法,但类型不是 Array
Bar.prototype.push = Array.prototype.push //不需要 Array 的所有方法
const foo = new Foo()
const bar = new Bar()
foo.push("A")
bar.push("A")
bar.push("B")
console.log(foo,foo.length)
console.log("is an arry?" + Arry.isArry(foo))
console.log(bar)

输出:

["A"] 1
foo is an array? false
Bar {0: "A", 1: "B", length: 2}

arguments与重载

在JavaScript中没有重载的说法,那怎么办实现重载呢

没有重载时候的情况:

function add(num1,num2){
    console.log("result1:")
	console.log(num1 + num2)
}
function add(num1,num2,num3){
    console.log("result2:")
    console.log(num1 + num2 + num3)
}
add(1,2)
add(1,2,3)

输出:

result2:
NaN
result2:
6

可以看出并没有输出result1的内容,原因是后者将前者重写了或者说覆盖了,那怎么办来实现两个都可使用呢,这时候arguments就登场了。

使用arguments来实现重载:

function add(num1,num2,num3){
    if(arguments.length===2){
        console.log("result1:")
        console.log(num1 + num2)
    }else if(arguments.length===3){
        console.log("result2:")
        console.log(num1 + num2 + num3)
    }
}
add(1,2)
add(1,2,3)
posted @ 2020-09-07 15:12  沐雨辰沨  阅读(294)  评论(0编辑  收藏  举报