2013-10-16 3 views
2

In this question, un des codes de réponses est:Signification de _ dans apply()

var arrays = [[1,2,3,4,5,6], [1,1,1,1,1,1], [2,2,2,2,2,2]]; 

_.map(_.zip.apply(_, arrays), function(pieces) { 
    return _.reduce(pieces, function(m, p) {return m+p;}, 0); 
}); 

dans apply(_, arrays) Je ne comprends pas ce que _ est lié.

+1

_ est un objet défini dans underscore.js (http://underscorejs.org/) ... ma meilleure estimation, c'est comme $ pour jQuery (sauf $ est utilisé dans beaucoup plus) ... et doit être un objet fonction –

Répondre

5

L'appel apply est équivalent à

_.zip([1,2,3,4,5,6], [1,1,1,1,1,1], [2,2,2,2,2,2]) 

Le premier argument de apply veille à ce que zip est appelé avec le bon contexte (this value) qui est généralement _, Espace de nommage constructor-function de -object de Souligné. En fait, il n'est pas utilisé dans la fonction zip, donc nous aurions pu l'omettre et passer null ou undefined à la place.

+0

pourquoi n'utilisez-vous pas _ _partial (_ .zip, tableaux) '? –

+1

'_.partial' sert à exécuter une fonction qui ne convient pas ici. Il renvoie une fonction, pas un tableau –

+0

@StephaneRolland: Qu'est-ce que, au lieu de 'apply'? Parce que cela n'invoque pas 'zip', l'appelle avec les mauvais arguments et ne renvoie pas un tableau mais une fonction. Vérifiez ce que fait _.partial' (http://underscorejs.org/#partial). – Bergi

1

Il n'y a pas beaucoup de signification dans ce _.

Voir la page officielle démo http://underscorejs.org/#zip

Le point principal est apply, qui accepte le second argument ici arrays comme arguments.

Alors _.zip(arr1, arr2, arr3) est en fait la même chose que _.zip.apply(null,[arr1,arr2, arr3])

Le premier argument, qui agit comme this mot-clé, peut être quelque chose. Le choix de _ est probablement un mème et souligne l'utilisation de _. Il suffit de le suivre :) enter image description here