关于 values.push.apply(values,arguments);中apply()的理解

2017-9-23 18:18:27 4,558 views
function specialArray(){
    //创建数组
    var values=new Array();
    //添加值
    values.push.apply(values,arguments);
    //values.push(arguments);
    //添加方法
    values.toPipedstring=function(){
        return this.join("|");
    }
    //返回数组
    return values;
}
var colors=new specialArray('red','yellow','green');
alert(colors.toPipedstring());      // red|yellow|green

有点疑惑为什么不直接用values.push(arguments);

arguments并不是Array类型
即使arguments是Array, values.push(arguments)的结果也不是你想要的
var arguments = ['red', 'yellow', 'green'];
var values=new Array();
values.push(arguments); // [ [ 'red', 'yellow', 'green' ] ]
console.log(values.length); // 1
console.log(values[0]); ['red', 'yellow', 'green']

上面的values.push(arguments); // [ [ 'red', 'yellow', 'green' ] ] console.log(values.length); // 1这里是关键,可以看出长度为1,也就是说是一个整体,这并不是我们想要的。我们想要的是一个一个的调用。
而apply可以把数组或者arguments对象展开成单个的函数参数

9

分享到微信朋友圈

打开微信,点击底部的“发现”,
使用“扫一扫”即可将网页分享至朋友圈。