寄生构造函数里的一个疑问

下面是一个寄生函数的例子,但我一直无法理解它在给values数组添加元素时为什么要用apply来将this指向values,原本不就是指向它的吗?

function SpecialArray(){

    //创建数组
    var values = new Array();

    //添加值
    values.push.apply(values, arguments);

    //添加方法
    values.toPipedString = function(){
        return this.join("|");
    };

    //返回数组
    return values;
}

var colors = new SpecialArray("red", "blue", "green");
//"red|blue|green"
alert(colors.toPipedString());
阅读 1.6k
2 个回答

clipboard.png

直接用push的话,你得把整个arguments遍历一遍,把每一项push到属于中。

如果用concat需要把arguments转换为数组,总之类数组需要变为数组,但是apply的第二参数可以arguments

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题