2013-06-29 9 views
5

Nel seguente codice, non sono sicuro che cosa rappresenti []. Suppongo che simboleggi solo l'array dichiarato più recentemente. Qualcuno può chiarire?Cosa c'è [] in []. ForEach.call()

var lists = [racersList, volunteersList]; 
[].forEach.call(lists, function(list) { 
    ... 
}); 
+2

Perché non basta fare 'lists.forEach (funzione (elenco), {...});'? – Blender

+0

@Blender chiede a cosa fa il codice, quindi non l'ha scritto. – Stijn

+0

@Stijn: Forse. Un suggerimento non farà male. – Blender

risposta

17

È un array vuoto. In realtà non importa quale array sia; serve solo della matrice per ottenere il metodo di un array. Puoi anche usare Array.prototype.forEach per ottenerlo direttamente piuttosto che creare una matrice vuota e scavare forEach fuori da esso.

Questo approccio viene solitamente utilizzato quando si dispone un oggetto array simile (come NodeList, ha un length, 0, 1, 2, ecc proprietà), ma non è in realtà un array. L'oggetto tipo array non ha i metodi dell'array, ma se è possibile ottenere i metodi dell'array per l'esecuzione con l'appropriato this (ottenuto con call), funzioneranno comunque.

Da qui in realtà avere un reale matrice piuttosto che un nell'edificio- come oggetto, è possibile richiamare forEach direttamente, per esempio, lists.forEach(...).

+0

In questo caso, "liste" * è * un array, quindi non c'è davvero alcun punto. – Pointy