在某些场景下,需要将函数的 arguments 参数作为一个数组调用,但是 arguments 是一个奇异对象,所以试着将 arguments 转化为一个数组;
function argToArr(){
return [].slice.call(arguments, 0);
}
console.log(argToArr(1,2,3)); //[1,2,3]
function argToArr(){
return Array.slice.call(arguments, 0);
}
console.log(argToArr(1,2,3)); //[]
这是为什么呢?
另外还有一个问题,是关于 Array 是怎么找到 slice 方法的。
Array 本身是没有 slice 方法,它的方法在 Array.prototype 中,而我们在调用 slice 方法的时候,如果在 Array 本身没有找到 slice 方法的话,会通过它的原型链往上查找,而 Array.proto 并没有指向 Array.prototype,而是指向 Function(),那么它是怎么找到 slice 方法的呢?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
第二段代码报错是因为
Array是构造函数,不是对象,打开控制台,输入typeof Array,结果是function你也说了
slice()方法在其原型对象中,而[]就是Array的原型对象,在控制台中输入Array.prototype,结果是[],所以第一段代码可以顺利执行。第二段代码如下修改就可以了
其实你的本质问题就在于误认为
Array是数组对象,然而它是构造函数