[JS] fonction item()

fonction item() [JS] - HTML/CSS - Programmation

Marsh Posté le 18-02-2008 à 20:19:02    

Hi all,
 
Je vois souvent ce genre de code utilisé pour l'accès à l'élément i d'un tableau
 

Code :
  1. TabNodes.item(i).firstChild (...)


 
J'utilise d'habitude le très classique
 

Citation :

TabNodes[i]


 
Est-ce plus correct d'utiliser la méthode item(i) ?
 
P.S: cette méthode fonctionne mais pourtant je n'en vois aucun trace dans les références JS (ex: http://developer.mozilla.org/en/do [...] ay_methods )  :??:


Message édité par ANViL le 18-02-2008 à 20:19:30
Reply

Marsh Posté le 18-02-2008 à 20:19:02   

Reply

Marsh Posté le 19-02-2008 à 10:52:36    

Prend pas pour argent comptant ma réponse, mais je dirais, du moins parceque c'est le cas avec les parseurs XML de Microsoft, que par exemple, pour TabNodes, il ne s'agit pas d'un Array, mais d'une collection.
Par essence, une collection, on est censé utiliser une méthode (ici "item(int index)" ) pour en récupérer un élément. En effet, un array, dans un langage de bas niveau, l'index n'est pas à proprement parler l'index d'un élément dans le tableau, mais la valeur de l'offset à appliquer à la taille d'un élément du tableau pour accéder à son nième élément.
 
Une collection pouvant avoir des trous, et représenter en mémoire des éléments non séquenciels et de taille variables, on différencie donc la syntaxe.
 
Dans les langages de plus haut niveau, une collection est généralement indexable, donc supporte aussi la syntaxe "array-like" pour accéder à un élément.
 
Pour moi, la différence vient de là.
 
Dans le cas d'une collection indexable, la syntaxe "[int index]" est juste un alias de ".item(int index)". Logiquement, il n'y a donc rigoureusement aucune différence si ce n'est sémantique. Je trouve la syntaxe via indexeur plus lisible, car on sait vraiment qu'on est en train d'accéder à un index, alors que .item() peut parfaitement avoir été surchargé pour effectuer une oppération toute autre.
En revanche, elle peut poser problème, car prête à confusion avec un array, et on peut par exemple être tenté d'utiliser la méthode ".sort()" qui est propre à un array en JS alors qu'elle n'existe pas dans une collection.
 
PS : Et logique que tu ne trouves pas ".item()" dans la doc sur les array, puisqu'il s'agit d'une collection ;)
 
Les langages très haut niveau comme le JS peuvent parfaitement implémenter les array comme une surcouche aux collections. En effet, en l'absence de gestion mémoire "à la main" comme en C, un array en JS doit de toute façon se comporter en mémoire comme une collection (gérer les trous, les objets de taille variable, etc.)
Du coup ça ne me surprends effectivement pas que ".item()" soit disponible aussi sur un "vrai" array avec certains interpréteurs JS.


Message édité par MagicBuzz le 19-02-2008 à 11:00:30
Reply

Marsh Posté le 19-02-2008 à 21:23:21    

Merci pour ta réponse  :)  
 
Je n'avais pas réalise que les NodeList avaient plus de sens d'être implémentées en tant que collection.
 
Une petit recherche sur mozdev m'a également renvoyé cette explication
 

Citation :

...On utilise également anchorTags[i], la même syntaxe que celle qui est utilisée en JavaScript pour accéder au ie élément d'un tableau. La « manière DOM » indépendante du langage pour accéder à un élément dans une NodeList est d'utiliser la méthode item(), définie sur l'interface NodeList : anchorTags.item(1).href. Mais la plupart des implémentations JavaScript permettent d'utiliser la syntaxe de tableau, plus simple, et c'est ce que la plupart des gens utilisent en réalité.


 
 :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed