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对象展开成单个的函数参数