Méthode Javascript bind()
Alors que call() et apply() sont utilisés pour invoquer une fonction avec un contexte spécifique en passant manuellement ou en fournissant des arguments sous forme de tableau, la méthode bind() sert un objectif différent.
Quand l'utiliser bind()
La méthode bind() doit être utilisée lorsque vous devez créer une nouvelle fonction avec un contexte prédéfini pour une invocation ultérieure. Ceci est particulièrement utile dans la gestion des événements et les rappels asynchrones.
Comparaison avec call() et apply()
Contrairement à call() et apply() qui exécutent immédiatement le fonction, bind() renvoie une nouvelle fonction. Cette nouvelle fonction, une fois exécutée, aura le contexte de la fonction d'origine défini sur l'objet lié.
Considérons l'exemple suivant :
var obj = { x: 81, getX: function() { return this.x; } }; // Bind the function to the object 'obj' var boundGetX = obj.getX.bind(obj); // Later, invoke the bound function with the desired context alert(boundGetX());
Dans ce scénario, la fonctionboundGetX conserve le contexte de l'objet obj, même lorsqu'il est invoqué de manière asynchrone ou lors d'un rappel.
Utilisation dans Event Gestion
Lors de la gestion d'événements, il est courant de vouloir conserver le contexte d'un objet particulier. En utilisant bind(), vous pouvez vous assurer que les gestionnaires d'événements ont le contexte correct lors de leur exécution.
function MyObject(element) { this.elm = element; element.addEventListener('click', this.onClick.bind(this), false); }; MyObject.prototype.onClick = function(e) { // 'this' refers to the MyObject instance // Perform some action... };
En liant la fonction onClick à l'instance MyObject, vous garantissez que lorsque l'événement click se produit, le mot clé this dans le gestionnaire d'événements fera référence à l'instance MyObject.
Détails de l'implémentation
Une implémentation simplifiée de bind() pourrait ressembler quelque chose comme ça :
Function.prototype.bind = function(ctx) { var fn = this; return function() { fn.apply(ctx, arguments); }; };
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!