Salut !
Il pique les yeux ce code... 
En fait, "objet" est une fonction employée comme un constructeur : elle est appelée avec le mot-clé "new". La pratique est très très douteuse selon moi... Une fois dans la fonction "objet" il faut donc penser que tu es dans une méthode (et non plus une fonction volatile). Le "this" fait donc référence à l'objet en cours d'instanciation. La boucle décale les valeurs passées en arguments pour qu'elles soient accessibles à partir de l'index 1 dans l'objet instancié, plutôt que 0 (petit décalage pour que le tableau soit "1-based" plutôt que "0-based"). L'objet a donc, effectivement, une vocation de conteneur.
Dans le fond, tout ce m###ier produit qqchose de similaire à :
[undefined].concat(["1", "2", "3", "4", "5", "6"])
Autrement, fn.arguments est équivalent à arguments lorsqu'il est évalué dans la fonction fn. Préfixer l'accès avec le nom de la fonction n'est donc, généralement pas utile. Il peut cependant te servir à récupérer les arguments passés à une fonction figurant dans la pile d'appel.
Exemple :
1 2 3 4 5 6 7 8 9 10
| function a(x,y,z) {
b(x+1,y+1,z+1);
}
function b(x,y,z) {
console.log(a.arguments[0], b.arguments[0]);
}
a(8,16,32); // affiche "8, 9" - utiliser Firebug ou changer pour un alert
b(8,16,32); // produit une erreur car "a" n'est pas dans la pile d'appels dans ce cas |
Partager