En JavaScript, les méthodes impliquent souvent le contexte, c'est-à-dire qu'elles ne peuvent souvent pas être citées directement. Prenez le console.log("info...") le plus courant comme exemple. Évitez d'écrire de longues consoles et utilisez directement log. ("info..."), vous penserez automatiquement à la syntaxe suivante :
var log = console.log; log("info…");
Désolé, l'erreur s'est produite lors de l'exécution : TypeError : Invocation illégale.
Pourquoi ? Pour console.log("info..."), la méthode log est appelée sur l'objet console, donc ceci dans la méthode log pointe vers l'objet console et nous utilisons la variable log pour pointer vers la méthode console.log ; puis appelez directement la méthode log. À ce moment-là, celle-ci pointe vers l'objet window. Si le contexte est incohérent, une erreur sera bien sûr signalée.
À ce stade, nous pouvons utiliser la méthode bind pour résoudre ce problème. La méthode bind vous permet de transmettre manuellement a this comme contexte de la méthode actuelle, puis de renvoyer la méthode contenant le contexte, par exemple :
var log = console.log.bind(console); log("info...");
De cette façon, il n'y aura pas d'erreurs.
Cependant, la méthode bind ne prend pas en charge les navigateurs IE 8 et inférieurs. Nous pouvons en implémenter une nous-mêmes, c'est très simple.
Function.prototype.bind = Function.prototype.bind || function(context){ var _this = this; return function(){ _this.apply(context, arguments); }; };
Le noyau est mis en œuvre via la méthode apply, une application classique de fermeture. _this pointe vers la méthode actuelle et le contexte pointe vers le contexte de la méthode actuelle, les deux étant accessibles via des fermetures.
Ce qui précède représente l’intégralité du contenu de cet article, j’espère que vous l’aimerez tous.