Regardons d'abord l'explication de l'appel dans MDN
La méthode Call () appelle une fonction ou une méthode avec une valeur spécifiée et plusieurs valeurs de paramètre spécifiées.
Remarque: La fonction de cette méthode est similaire à celle de la méthode applicable (), avec une seule différence, c'est-à-dire que la méthode Call () accepte une liste de plusieurs paramètres, tandis que la méthode applicable () accepte un tableau contenant plusieurs paramètres.
grammaire
fun.call (thisarg [, arg1 [, arg2 [, ...]]]])
paramètre
thisarg
Cette valeur spécifiée lorsque la fonction amusante est en cours d'exécution. Il convient de noter que cette valeur spécifiée ne signifie pas nécessairement la réalité cette valeur lorsque la fonction est exécutée. Si cette fonction est en mode non stricte, cette valeur spécifiée comme nul et indéfinie pointera automatiquement vers l'objet global (l'objet de fenêtre dans le navigateur), et cette valeur avec la valeur d'origine (nombre, chaîne, valeur booléenne) pointera vers l'objet d'emballage automatique de la valeur d'origine.
Arg1, Arg2, ...
Liste de paramètres spécifiée.
Les exemples sur MDN n'étaient pas faciles à comprendre au début. Je les ai postés ici. Si vous êtes intéressé, vous pouvez consulter vous-même Call-Javascript.
Thisarg ici est interprété comme cette valeur spécifiée lorsque le plaisir fonctionne, c'est-à-dire qu'après avoir utilisé l'appel, ce qui est en amusant indique Thisarg? Regardez le code
var p = "456"; fonction f1 () {this.p = "123"; } fonction f2 () {console.log (this.p); } f2 (); // 456 f2.Call (f1 ()); // 123 f2.Apply (f1 ()); // 123La première sortie est la variable globale appelée. Plus tard, en raison de l'utilisation de l'appel et de l'application, cela en F2 pointe vers F1, donc la sortie devient 123. En fait, F1 emprunte la méthode de F2 et publie son propre P
À l'heure actuelle, la suppression de ce.p en F1 () sortira trois 456, ce qui confirme que lorsque cela est nul ou non défini, il pointe en fait la variable globale.
Quant à l'objet d'emballage qui pointe vers la valeur d'origine, car les objets d'emballage que je comprends sont temporaires, et seul le type de la valeur d'origine est sorti pendant le test au lieu de l'objet, comment le prouver ici si quelqu'un le sait peut en discuter avec moi si vous espérez qu'il sera discuté avec moi, merci!
Étant donné que l'appel peut implémenter un objet pour emprunter un autre objet, peut-il implémenter l'héritage? Regardez le code
fonction f1 () {this.father = "père"} fonction f2 () {f1.call (this); this.child = "enfant"; } var test = new f2 (); Console.log (test.mère); //pèreIl n'y a pas de père à test, car dans F2 ()
f1.Call (ceci);
Cela indique ici F2, c'est-à-dire que F2 emprunte la méthode de F1, qui réalise en fait l'héritage.
Parlons des paramètres ici. Les paramètres ici sont passés au plaisir. Voyons le code
fonction f1 () {this.p = "123"; } fonction f2 (x) {console.log (this.p); console.log (x); } f2.Call (f1 (), 456); // 123 // 456La sortie de 123 est due au P dans F1, et le 456 ultérieur est le paramètre transmis à F2, ce qui est facile à comprendre.
Faites principalement attention à la différence entre les paramètres de l'appel et appliquez
L'appel est passé dans un par un, tandis que l'application est un tableau passé
Fonction f1 () {this.p = "Test Call"; } fonction f2 (x, y, z) {console.log (this.p); console.log (x); console.log (y); console.log (z); } fonction f3 () {this.p = "test appliquer"; } f2.Call (f1 (), 4,5,6); f2.All (f1 (), [4,5,6]); f2.Apply (f3 (), [4,5,6]); f2.Apply (f3 (), 4,5,6);Vous pouvez voir les résultats ici
Le premier appel de test est la sortie correcte
Le deuxième appel d'essai est passé dans un tableau, donc un tableau est d'abord sorti et deux non définis
Le troisième test de paragraphe applique la sortie correcte
Le quatrième paragraphe a directement signalé une erreur due à l'erreur dans le format de paramètre
La différence ici devrait être évidente