【发布时间】:2013-12-08 04:04:56
【问题描述】:
我一直在阅读一本书,在回答有关 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 中。我不明白的是这个论点。
我了解更改此值会将其指向另一个对函数有用的对象。在这种情况下,我尝试将值更改为其他值,因为我只是将参数数组推送到新数组中并且不需要更改 this 指针,但是我在结果中得到一个空白,而不是值?
有人可以向我解释为什么更改 thisArg 会产生空白吗? values.push 应该已经表明我特别希望它在 values 数组中,并且只使用 apply arrArg 将一个数组加入到另一个类似于 concat 方法的数组中。
【问题讨论】:
-
当您到达
.apply()时,.push方法已经失去了与values的关系。请记住,this仅在您调用函数时设置。但是您没有直接调用.push()。您正在调用.apply(),它会为您调用.push()。所以你需要告诉.apply()this值应该是你告诉它为你调用的方法。 -
...
.apply()方法中的this值将是通用的.push()方法。它与values没有永久关系。
标签: javascript arrays methods push apply