2012-10-04 24 views
0

我在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); 
} 

我不明白的是在這裏叫做什麼。如果我們沒有它,我們是不是仍然要通過匿名功能來循環和安慰價值?這是否與關閉做任何事情?我只是想了解如何使用.call()以及爲什麼。

+2

「外行人」條款?外行人對編程有什麼瞭解嗎? –

+0

您可能想要閱讀MDN的[關於'this'關鍵字的介紹](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/this) – Bergi

+0

並且在獲得'this'關鍵字下降.. [呼叫參考](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/call) – Stephen

回答

5

call在特定的上下文中調用函數。在這種情況下,它將this設置爲animals[0]animals[1]。沒有它,this在函數的上下文將不會被設置(或者更確切地說,它將被設置爲window)。

+0

動物[0] .say(); animals [1] .say();好的 - 我現在明白了,謝謝。 –