push.apply方法和this参数

时间:2013-12-08 04:04:57

标签: javascript arrays methods push apply

我一直在阅读一本书,需要帮助回答有关push.apply的非常具体的问题。

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");
console.log(colors.toPipedString());

我理解这段代码的作用但是有点遗失:

values.push.apply(values, arguments);

据我了解。这使用push和apply将函数参数中的数组添加到values数组的0,1和2中。我不明白的是这个论点。

我知道更改此值会将此指向另一个对函数有用的Object。在这种情况下,我尝试将值更改为其他内容,因为我只是将arguments数组推送到新数组中而不需要更改this指针,但是除了值之外,我在结果中得到一个空白?

有人可以向我解释为什么更改thisArg会产生空白吗? values.push应该已经表明我想在values数组中特别想要它,并且只使用apply arrArg将数组连接到另一个类似于concat方法的数组。

1 个答案:

答案 0 :(得分:0)

  

values.push应该已经表明我想在值数组

中特别想要它

不。

撰写values.push(...)会将values作为this参数传递给push()
这是push()知道要推进的唯一方式。

如果您使用apply()来对其进行调整,则需要明确将values作为this传递。

换句话说,函数values.push[].pushArray.prototype.push之间没有区别。