【问题标题】:The push.apply method and the this argumentpush.apply 方法和 this 参数
【发布时间】: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


【解决方案1】:

values.push 应该已经表明我特别想要它在 values 数组中

没有。

编写values.push(...) 会将values 作为this 参数传递给push()
这是push() 知道要推动什么的唯一方法。

如果使用apply() 调用它,则需要将values 显式传递为this

换个说法,values.push[].pushArray.prototype.push这三个函数没有区别。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    相关资源
    最近更新 更多