La syntaxe JavaScript est flexible, et il n'est pas rare d'avoir cinq ou six méthodes d'implémentation pour la même fonction. Je ne comprends souvent pas la différence entre l'appel et l'appliquer, donc je vais l'enregistrer aujourd'hui pour éviter de l'oublier à nouveau.
Dans JavaScript, les méthodes peuvent être exécutées de la manière suivante:
1.Func () est le moyen le plus direct et le plus courant d'appeler, et il est également conforme à la logique de pensée des gens ordinaires, mais dans certains cas, il y a des lacunes, qui seront expliquées ci-dessous.
2. (Fonction (arg) {}) (Window), un appel de méthode anonyme, est plus utile lors de la construction d'un espace de noms.
3.Func.Bind (SH) ().
4.func.call (), c'est la deuxième façon d'appeler.
5.func.Apply (), Call's Twin Brother.
func ()
C'est le moyen le plus courant d'appeler et peut être vu partout dans n'importe quelle langue. Func (x, y) peut passer dans différents paramètres. Dans certaines langues, comme PHP, Java, ce type d'appel suffit pour résoudre tous les problèmes. Mais JavaScript est un langage fonctionnel, et le concept de fermetures et un mot clé étrange qui détermine les lacunes de cette façon d'appeler. Cela doit être interprété comme la portée du segment de code actuel, qui changera à mesure que le code s'exécute en différents fragments.
La copie de code est la suivante:
var a = {};
var func = fonction (x) {
console.log (ceci);
};
a.OnClick = function () {
var x = 100;
func (x);
};
A.OnClick ();
Vous pouvez considérer un lien dans la page. Car nous voulons simplement lier la méthode définie à l'événement OnClick au lieu de l'appeler immédiatement, et cette méthode a un paramètre, nous devons le conclure avec une méthode anonyme et la transmettre à l'événement onclick de A. Cela a un problème. Pour le moment, l'utilisation de func () comme méthode d'appel direct n'est pas possible, nous devons donc le lier en dehors de FUNC à la méthode FUNC. Il y a donc une méthode de liaison, d'appel, d'application.
lier
Le but de Bind est très simple, renvoyant la même méthode qui lie cet objet. Le code ci-dessus peut atteindre le but de la liaison sur l'objet A en modifiant une ligne.
La copie de code est la suivante:
var a = {};
var func = fonction (x) {
console.log (ceci);
};
a.OnClick = function () {
var x = 100;
func.bind (ce) (x);
};
A.OnClick ();
De cette façon, cet événement Onclick ne fonctionnera pas comme une mouche sans tête.
Appeler et appliquer
L'appel et la demande doivent être discutés ensemble car ils sont si similaires. Ils prennent tous en charge plusieurs paramètres, et le premier paramètre est cet objet qui sera lié, et le deuxième paramètre est leur différence. Parfois, nous ne voulons pas changer cet objet, mais nous voulons le lier artificiellement à d'autres objets. (Ce n'est pas que vous ne pouvez pas utiliser Bind, mais il semble que Bind apparaît en retard, donc la compatibilité du navigateur peut être médiocre). Prenez un châtaignier:
La copie de code est la suivante:
a = {
func: function () {
this.x + = 1;
},
x: 0
};
b = {
A: A,
X: 20
};
pour (var i = 0; i <10; i ++) {
Bafunc ();
}
Console.log (AX);
console.log (bx);
Il y a X dans les objets A et B ci-dessus. Modifier le code pour atteindre le but de modifier BX
La copie de code est la suivante:
a = {
func: function () {
this.x + = 1;
},
x: 0
};
b = {
A: A,
X: 20
};
pour (var i = 0; i <10; i ++) {
bafunc.Call (b);
}
Console.log (AX);
console.log (bx);
Ce châtaignier n'est pas bien reçu, et c'est un style de code très déroutant, avec des scénarios applicables, mais pas disponible partout.