Maison  >  Article  >  interface Web  >  Comment jouer : techniques d'appel et d'apply_javascript

Comment jouer : techniques d'appel et d'apply_javascript

WBOY
WBOYoriginal
2016-05-16 16:49:041174parcourir

Dans ECMAScript v3, ces deux méthodes sont définies pour le prototype Function. Les fonctions de ces deux méthodes sont les mêmes : en utilisant ces deux méthodes, vous pouvez appeler des fonctions comme si vous appeliez d'autres méthodes objet. Je l'ai copié ci-dessus, au moins je n'ai pas compris ce que cela signifiait.
Ce qui suit est simple et facile à comprendre, regardons d’abord le code :

Copier le code Le code est le suivant :

fonction Présenter (nom, âge)
{
Document.write("Mon nom est " nom ". J'ai " âge);
var p=new People();
Introduce.call(p,"Windking"); ,20) ;

Parlons du code ci-dessus. Après avoir utilisé call, Introduce devient la méthode de p. En utilisant la méthode call, le code ci-dessus est équivalent à ce code :

Copier le code Le code est le suivant :
fonction Personnes (nom, âge)
{
this.name=name;
this.age=age;
this.Introduce=function(){
document.write("Mon nom est " nom ". Je suis " age );
}
}

Comprenez-vous le sens ? appliquer a le même effet.

D'accord, parlons d'abord de grammaire, quelle que soit la manière dont cette méthode peut être utilisée dans la pratique.
call accepte au moins un paramètre. Le premier paramètre de call fait référence à l'objet dont vous avez besoin. Par exemple, dans l'exemple ci-dessus, la méthode Introduce espère qu'elle pourra être appelée par l'objet p, puis utilisez p comme premier paramètre. des paramètres d’appel. Le nombre restant de paramètres est arbitraire et sert de paramètres pour la méthode Introduce. L'ordre est dans l'ordre dans lequel les paramètres Introduce sont déclarés. Par exemple, Introduce.call(p,"Windking",20), si Introduce est une méthode d'instance de p, alors ce sera comme ceci : p.Introduce("Windking",20). Est-ce que tu comprends? N'oubliez pas que l'ordre des paramètres transmis doit être cohérent avec l'ordre dans lequel les paramètres sont déclarés dans la fonction.
Après avoir compris l'appel, la méthode apply est facile à comprendre. La seule différence entre apply et call est que call accepte au moins un paramètre, tandis qu'apply n'accepte que deux paramètres. Le premier paramètre est identique à call et le second. Le paramètre est un paramètre avec une collection d'indices, par exemple, Introduce.call(p,"Windking",20) peut être réécrit comme Introduce.apply(p,["Windking",20]). Comprenez-vous cette fois ?
Alors à quoi servent ces deux méthodes ? Si nous voulons simplement implémenter la fonction ci-dessus, ne serait-il pas préférable d'implémenter la méthode Introduce as People ?

Je résume la candidature en deux éléments :

1. Méthode de partage. Regardons d'abord le code :

Copier le code Le code est le suivant :
fonction Présenter (nom, âge)
{
         document.write("Je m'appelle " nom ". J'ai " âge );
Il s'agit d'une méthode d'auto-présentation. Supposons maintenant que nous ayons une classe de garçons et une classe de filles (je suis juste ici pour une démonstration, en pratique, j'utiliserai une classe de parents People), car leurs présentations sont toutes identiques. , nous pouvons donc partager cette méthode.

Copier le code

Le code est le suivant :function Boy() { this .BoyIntroduce=function(){
Introduce.call(this,name,age
}
}


;
De même, c'est pareil dans Girl. Dans ce cas, on peut éviter d'écrire du code. En fait, c'est un peu tiré par les cheveux, car on peut aussi l'écrire ainsi :

Copier le code

Le code est le suivant :function Boy() { this .BoyIntroduce=function(){
     Introduce(name,age);
}
}



Mais pour le moment, si nous utilisons Apply, cela paraîtra beaucoup plus simple :

Copier le code

Le code est le suivant :function Boy() { this .BoyIntroduce=function(){
Introduce.apply(this,arguments);
}
}

;

N'est-ce pas beaucoup plus simple ? S’il y a beaucoup de paramètres, alors il n’est pas nécessaire d’écrire une série de paramètres aussi dense !

2. Appels inter-domaines

Regardez un exemple simple (juste à titre de démonstration, aucune valeur) :

Copier le code Le code est le suivant :

fonction Garçon(nom,âge)
{
this.BoyIntroduce=function(){
document.write("Je m'appelle " nom ". J'ai
}
}
function Girl(nom, âge)
{

}

C'est un cours Garçon et Fille, puis on écrit le code suivant :

var b=new Boy("Windking",20);
b.BoyIntroduce();

Aucune objection à cela. Supposons qu'un jour une fille veuille se présenter et l'utilise de temps en temps, alors je n'ai pas besoin de modifier la classe Fille, car les autres filles sont timides et n'aiment pas se présenter. Alors je peux le faire à ce moment-là.

var g=new Girl("Xuan",22);

Introduce.call(g,"Xuan",22

3. L'utilisation réelle - l'héritage

D'accord, ce qui précède est tous trivial et non raffiné. Ce qui suit est l'application la plus largement utilisée de call et apply, qui est utilisée pour l'héritage structurel.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn