Bind() vs call() et apply() de Javascript : quand les utiliser ?
While call() et apply() sont tous deux utilisés pour invoquer des fonctions dans un contexte spécifique (en définissant le mot-clé this dans la fonction), leur principale distinction réside dans la manière dont les arguments sont transmis à la fonction. call() s'attend à ce que les arguments soient transmis dans une liste séparée par des virgules, tandis que apply() nécessite un tableau d'arguments.
Utilisation de la méthode bind()
Contrairement call() et apply(), bind() n'invoque pas la fonction immédiatement. Au lieu de cela, il renvoie une nouvelle fonction liée qui, lorsqu'elle sera invoquée ultérieurement, aura le contexte correct défini pour appeler la fonction d'origine. Ceci est particulièrement utile dans les situations où vous souhaitez conserver le contexte dans des rappels ou des événements asynchrones.
Par exemple, considérez le code suivant :
function MyObject(element) { this.elm = element; element.addEventListener('click', this.onClick.bind(this), false); }; MyObject.prototype.onClick = function(e) { var t=this; //do something with [t]... //without bind the context of this function wouldn't be a MyObject //instance as you would normally expect. };
Dans le gestionnaire onClick, le mot clé this fera référence à l'instance MyObject qui a créé l'écouteur d'événement, même si l'événement est déclenché de manière asynchrone.
Quand l'utiliser Call/Apply vs Bind
Utilisez call() ou apply() lorsque vous devez appeler une fonction immédiatement et modifier son contexte. En revanche, utilisez bind() lorsque vous souhaitez que la fonction puisse être appelée ultérieurement dans un contexte spécifique, comme dans les événements.
Voici une illustration simple :
var obj = { x: 81, getX: function() { return this.x; } }; alert(obj.getX.bind(obj)()); // 81 alert(obj.getX.call(obj)); // 81 alert(obj.getX.apply(obj)); // 81
Dans les trois scénarios , la sortie est 81, puisque toutes les fonctions invoqueront la fonction getX dans le contexte obj. Cependant, la version bind() renvoie une nouvelle fonction qui, une fois exécutée, aura le contexte souhaité défini.
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!