9
votes

Expliquer une partie du code Ninja de John Resig

var introduce = function(greeting) { alert(greeting + ", my name is " + this.name + " ,home no is " + arguments[1]); }

hiBob(" 456"); // alerts "Hi, my name is Bob"
yoJoe(" 876");  

1 commentaires

Pas de upvotes? Devrait justifier au moins 1 ou 2


5 Réponses :


1
votes

Pour répondre à votre question, c'est ce que Slice

Array.slice (commencez [ fin]) le tranche la méthode crée un nouveau tableau d'un section sélectionnée d'un tableau. Les tableau d'origine n'est pas affecté par cette Mais si une chaîne ou un numéro dans un Le tableau est altéré, il n'est pas reflété dans l'autre, alors qu'un changement à un L'objet référencé peut être vu dans les deux Array Objets. La méthode des tranches utilise l'index de la matrice zéro à déterminer la section sur laquelle à Créez le nouveau tableau. Il extrait à, mais non compris, la "fin" élément (si aucune «fin» n'est spécifiée, le La valeur par défaut est le dernier élément). Les Le code suivant crée un tableau appelé 'arbres' puis affiche une "tranche" de IT: CODE: P>

trees = ["oak", "ash", "beech", "maple", "sycamore"] 
document.write(trees.slice(1,-2)) 


4 commentaires

Cela ne répond pas vraiment à sa question. Je pense qu'elle voulait savoir ce qu'il a fait dans le contexte donné.


Ah, la prochaine fois que je vais déduire ce qu'elle veut vraiment savoir :)


Je pense que c'est injuste de descendre-mod cette réponse. Je vais moi-même indiquer que la tranche peut être utilisée pour copier un tableau au lieu de passer autour d'une référence.


Ma faute mais la supposition de CDMCKay était juste. Je voulais savoir ce que le code ci-dessus a fait dans le contexte. J'ai bien compris ce qu'Apay.Prototype.slice.Call (Arguments) depuis le prochain appel à A arg.shift () :-) Susan



6
votes

array.pototype.slice.call (arguments) crée un tableau contenant tous les arguments transmis à la fonction.


0 commentaires

-1
votes

Il allume l'objet argument dans un objet objet afin qu'il puisse appeler arg.shift () . .

L'objet Arguments est un objet de type tableau contenant 0 ou plusieurs propriétés d'index numérique et une longueur propriété


1 commentaires

Il n'y a pas de argument type javascript. Arguments est un objet uniforme avec zéro ou plusieurs propriétés numériques et une propriété longueur (un objet de type tableau).



8
votes

the arguments objet est un objet de type tableau, il a seulement la propriété de longueur.

appeler la fonction de tranche via le tableau.Prototype est une technique courante pour la convertir en une matrice, vous pourrez donc utiliser des fonctions de tableau tels que shift et Concat sur cet exemple, directement.


5 commentaires

Je déteste que les arguments soient un tableau à moitié cuit au four, si ennuyeux


Oui. J'ai toujours pensé que c'était boiteux aussi.


Oui, ennuyeux, c'est l'une des choses qui seront améliorées sur Ecmascript 5 ...


@CMS NOPE, Arguments Hérités toujours de Object.Prototype dans ES5, pas à partir de array.pototype . Vous avez également oublié plutôt utile (bien que quelque peu mal conçu) arguments.callee :)


@KANGAX: Oui, je ne l'ai pas mentionné, ni les arguments obsolètes.caller, il est dommage que cela hérite toujours de l'objet.Prototype, je viens de voir le projet final de septembre :( ( is.gd/3rqkb [pdf] page 70)



6
votes

Ce code crée une nouvelle méthode sur la fonction type nommée liant qui accepte une fonction libre en entrée et renvoie une fonction d'emballage qui l'appelle comme s'il s'agissait d'une méthode sur l'objet spécifié. Ceci est assez similaire à la manière dont un délégué .NET enveloppe une fonction et son référence associée cette référence .

En outre, si plus d'un argument est fourni à lidez , ces Des arguments supplémentaires sont ajoutés à l'appel - cette technique s'appelle également Currying .

Pour essayer de l'expliquer de manière plus simple, considérez quelque chose comme ceci: xxx


2 commentaires

Merci. Cette information m'a été utile de regarder davantage dans ce code. Susan


Votre réponse était la plus utile pour moi depuis que j'ai appris au cœur de Currying