Dans ECMAScript V3, ces deux méthodes sont définies pour le prototype de fonction. Les fonctions de ces deux méthodes sont les mêmes: l'utilisation de ces deux méthodes peut appeler des fonctions comme appeler d'autres méthodes d'objet. Cette phrase a été copiée du livre, du moins je ne comprenais pas ce que cela signifie.
Parlons de simple et facile à comprendre. Regardons d'abord le code:
La copie de code est la suivante:
Fonction Introduction (nom, âge)
{
Document.Write ("Mon nom est" + nom + ". Je suis" + âge);
}
var p = new People ();
Introduction.Call (P, "Broulinking", 20);
Parlons du code ci-dessus. Après avoir utilisé l'appel, l'introduction devient la méthode de p. Je me demande si vous comprenez cela? En utilisant la méthode d'appel, le code ci-dessus est équivalent à ce code:
La copie de code est la suivante:
fonction des gens (nom, âge)
{
this.name = name;
this.age = âge;
this.introduce = function () {
Document.Write ("Mon nom est" + nom + ". Je suis" + âge);
};
}
Comprenez-vous le sens? Appliquez la même fonction.
Ok, peu importe ce que cette méthode peut être utilisée dans la pratique, parlons d'abord de la grammaire.
L'appel accepte au moins un paramètre. Le premier paramètre de l'appel fait référence à l'objet dont vous avez besoin. Par exemple, dans l'exemple ci-dessus, la méthode d'introduction espère qu'elle peut être appelée par objet P, donc p est utilisé comme premier paramètre de l'appel. Le nombre restant de paramètres est arbitraire et il est utilisé comme paramètre de la méthode d'introduction. L'ordre est dans l'ordre déclaré par le paramètre introducteur. Par exemple, introduire.Call (P, "Notking", 20), si vous introduisez est un exemple de méthode de P, alors c'est ce que cela signifie: P. Introduce ("Boullage", 20). Est-ce que tu comprends? N'oubliez pas que l'ordre des paramètres entrants doit être cohérent avec les paramètres de déclaration de l'ordre de fonction.
Après avoir compris l'appel, la méthode d'application est facile à comprendre. La seule différence entre l'application et l'appel est que l'appel accepte au moins un paramètre, tandis que l'application n'accepte que deux paramètres. Le premier paramètre est le même que l'appel, et le deuxième paramètre est un ensemble avec les indices. Par exemple, Introduction.Call (P, "Navage", 20) peut être réécrit dans Introduction.Apply (P, ["Nuive", 20]). Comprenez-vous cette fois?
Alors, quelles sont les utilisations de ces deux méthodes? Si nous voulons simplement implémenter la fonction ci-dessus, n'est-il pas préférable de mettre en œuvre l'introduction en tant que personnes?
Je résume la demande en deux:
1. Méthode de partage. Regardons d'abord le code:
La copie de code est la suivante:
Fonction Introduction (nom, âge)
{
Document.Write ("Mon nom est" + nom + ". Je suis" + âge);
}
Il s'agit d'une méthode d'auto-introduction. Disons maintenant que nous avons une classe de garçon et une classe de filles (je suis juste pour la démonstration ici, en pratique, une classe de parents du peuple sera utilisée), car leur introduction est la même, nous pouvons donc partager cette méthode.
La copie de code est la suivante:
fonction boy ()
{
this.boyIntroduce = function () {
Introduction.Call (ce, nom, âge);
};
}
De même, il en va de même chez Girl, donc nous pouvons éviter d'écrire du code. En fait, c'est un peu farfelu, car nous pouvons l'écrire comme:
La copie de code est la suivante:
fonction boy ()
{
this.boyIntroduce = function () {
Introduction (nom, âge);
}
}
Mais pour le moment, si nous utilisons une application, il semblera beaucoup plus simple:
La copie de code est la suivante:
fonction boy ()
{
this.boyIntroduce = function () {
Introduction.apply (ceci, arguments);
};
}
N'est-ce pas beaucoup plus simple? S'il existe de nombreux paramètres, alors vous n'avez pas besoin d'écrire une telle série de paramètres denses!
2. Appel inter-domaine
Voir un exemple simple (pour la démonstration uniquement, aucune valeur):
La copie de code est la suivante:
Fonction Boy (nom, âge)
{
this.boyIntroduce = function () {
Document.Write ("Mon nom est" + nom + ". Je suis" + âge);
}
}
Fonction Girl (nom, âge)
{
}
Ceci est un garçon et une classe de filles, puis nous écrivons le code suivant:
var b = new boy ("bainking", 20);
b.boyIntroduce ();
Il n'y a aucune objection à cela. Supposons qu'il y ait une fille qui veut se présenter un jour et l'utiliser simplement par hasard, alors je n'ai pas besoin pour moi de modifier le cours de filles, car d'autres filles sont timides et n'aiment pas se présenter. Ensuite, je peux le faire pour le moment.
var g = nouvelle fille ("Xuan", 22);
Introduction.Call (G, "Xuan", 22);
3. Utilisation réelle - héritage
D'accord, ce qui précède est tous de petites astuces, et ce n'est pas un lieu d'élégance. Vous trouverez ci-dessous l'appel et l'application le plus utilisés, qui est utilisé pour l'héritage structurel.