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 :
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 :
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) :
C'est un cours Garçon et Fille, puis on écrit le code suivant :
var b=new Boy("Windking",20);
b.BoyIntroduce();
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.