Je comprends enfin l'utilisation de call(), apply() et bind() en javascript
C'est en fait une chose très simple. Après dix minutes de lecture attentive, je suis passé du statut d'être. confus pour bien comprendre.
Comprenez d'abord ce qui suit :
Exemple 1
obj.objAge; //17
obj.myFun () //L'âge de Xiao Zhang n'est pas défini
Exemple 2
shows() //Moine aveugle
Comparez la différence entre les deux ceci, Ceci dans la première impression pointe vers obj, et dans la deuxième fonction shows() déclarée globalement, c'est window
1, call(), apply() et bind() sont tous utilisés pour redéfinir cela ; Cet objet !
Par exemple :
obj.myFun.call(db); // L'âge de Dema est 99
obj.myFun.apply ( db); //L'âge de Dema est 99
obj.myFun.bind(db)(); //L'âge de Dema est 99
Il y a un extra () après la méthode de liaison. , les résultats renvoyés sont cohérents !
On peut en conclure que bind renvoie une nouvelle fonction et que vous devez l'appeler pour être exécutée
2. Comparez les cas d'appel, de liaison et d'application de paramètres
obj.myFun.call(db,'Chengdu','Shanghai'); //Dema a 99 ans de Chengdu à Shanghai
obj.myFun.apply(db ,[ 'Chengdu','Shanghai']); //L'âge de Dema est de 99 ans. De Chengdu à Shanghai
obj.myFun.bind(db,'Chengdu','Shanghai')(); a 99 ans. De Chengdu à Shanghai
obj.myFun.bind(db,['Chengdu','Shanghai'])(); // L'âge de Dema est de 99 ans. De Chengdu à Shanghai à undefined
Différence subtile !
Il n'est pas difficile de voir à partir des quatre résultats ci-dessus
Les premiers paramètres des trois fonctions call, bind et apply sont tous pointés par ceci. La différence vient du deuxième paramètre :
Les paramètres de. call Il est saisi directement. Les deuxième, troisième et nième paramètres sont tous séparés par des virgules et placés directement à la fin. obj.myFun.call(db,'Chengdu', ...,'string'); Tous les paramètres de apply sont Il doit être placé dans un tableau et passé dans obj.myFun.apply(db,['Chengdu', …, 'string' ]); Sauf que bind renvoie une fonction, ses paramètres sont les pareil que l'appel.
Bien sûr, les paramètres des trois ne se limitent pas au type de chaîne et peuvent être de différents types, y compris des fonctions, des objets, etc. !
Recommandations associées :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!