我一直在阅读一本书,需要帮助回答有关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方法的数组。
答案 0 :(得分:0)
values.push应该已经表明我想在值数组
中特别想要它
不。
撰写values.push(...)
会将values
作为this
参数传递给push()
。
这是push()
知道要推进的唯一方式。
如果您使用apply()
来对其进行调整,则需要明确将values
作为this
传递。
换句话说,函数values.push
,[].push
和Array.prototype.push
之间没有区别。