用外行术语解释.call()。协助理解它

时间:2012-10-04 18:52:58

标签: javascript jquery

我在mozilla文档中看到了这个例子。以下解释:

“在这个纯粹构造的例子中,我们创建了一个匿名函数并使用call来调用它在数组中的每个对象。这里匿名函数的主要目的是为每个对象添加一个打印函数,它能够打印数组中对象的正确索引。将对象作为此值传递并非绝对必要,但是出于解释目的而这样做。“

var animals = [
  {species: 'Lion', name: 'King'},
  {species: 'Whale', name: 'Fail'}
];

for (var i = 0; i < animals.length; i++) {
  (function (i) {
    this.print = function () {
      console.log('#' + i  + ' ' + this.species + ': ' + this.name);
    }
  }).call(animals[i], i);
}

我不明白的是在这里做什么。如果我们没有它,我们是不是仍然会通过anon功能循环并安慰价值?这有什么关闭吗?我只想了解如何使用.call()以及为什么。

1 个答案:

答案 0 :(得分:5)

call调用特定上下文中的函数。在这种情况下,它将this设置为animals[0]animals[1]。没有它,函数上下文中的this将不会被设置(或者它将被设置为window)。