Maison > interface Web > js tutoriel > `bind()`, `call()` et `apply()` de Javascript : quand dois-je les utiliser ?

`bind()`, `call()` et `apply()` de Javascript : quand dois-je les utiliser ?

DDD
Libérer: 2024-12-02 01:37:10
original
193 Les gens l'ont consulté

Javascript's `bind()`, `call()`, and `apply()`: When Should I Use Each?

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.
};
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal