2016-01-24 34 views
0

an answer中,@Tushar建議對應以下語法。Array.apply在JavaScript中的第一個參數是什麼?

Array.apply(null, Array(3).fill(10)) 
    .map(function (item, index) { 
    return item + index; 
    }); 

我明白這裏發生了什麼,我很滿意。然而,它讓我感到有些迷惑,這種看似毫無價值的論證。於是我開始研究。根據智慧on the web,這是這個的參考。現在,這給了我很少的清晰度,儘管把黃瓜,數組和物體放進去了,但它並不影響千斤頂,據我所知。事實上,我很好奇爲什麼以下幾點不相同,更別提足夠了。

Array(3).fill(10) 
    .map(function (item, index) { 
    return item + index; 
    }); 

此外,我閱讀一些有關的Cr的IE不接受陣列狀物體,它告訴我甚至更少。此外,要驗證文章的年齡有些困難,所以其索賠的有效性很難評估。我對原型構造器的討論甚至放棄了,不確定我是否在正確的道路上。

回答

0

Array(number)創建一個給定大小的數組,但它不填充任何數據點。調用mapfill或幾乎所有其他東西,因此不會做任何有用的事情。

Array(item1, item2, item...)另一方面創建一個具有給定項作爲數組元素的數組。你可以撥打mapfill,無論你想在這個,它會工作。

那麼如何使用這個來創建一個給定大小的數組,你可以調用map?完全是你看到的方式。

Array.apply(null,Array(3))確實的是創建大小3的未填充陣列,然後傳遞這些3個未定義項目作爲參數Array,因此導致
Array(undefined,undefined,undefined),它給你一個map pable陣列。需要注意的是,您在這裏創建了兩個陣列,但使用後丟棄了Array(3)

那麼爲什麼null?那是因爲在創建一個數組時,沒有與this相關的地方。由於上下文無關緊要,你可以直接傳遞任何你想要作爲上下文的東西,並且它可以正常運行,但是最簡單的理解是,如果你通過上下文無關緊要,那麼null

+0

我在瀏覽器的控制檯兩個代碼示例粘貼。出來,有* [10,11,12] *來了,我看到這兩者之間沒有區別。我錯過了什麼? –

+0

填充確實會填充孔。 – 2016-01-24 15:00:09

3

apply的第一個參數僅在使用使用this的函數時才重要。

運行下面的代碼片段應該使它更清晰一點:

var o = {value: 1}; 

var fn = function(a) { 
    console.log(a + this.value); 
} 
value = "something else"; 

fn("an argument "); 
fn.apply(o, [20]); 

// the above prints: 
// an argument something else 
// 21 

https://jsfiddle.net/f2zw8edd/

相關問題