Maison >interface Web >js tutoriel >Comment « ceci » fonctionne-t-il dans les appels et les rappels de fonctions JavaScript ?

Comment « ceci » fonctionne-t-il dans les appels et les rappels de fonctions JavaScript ?

DDD
DDDoriginal
2024-11-03 15:42:30370parcourir

How Does `this` Work in JavaScript Function Calls and Callbacks?

Lorsque ces pointeurs sont définis en JavaScript

Comprendre ces pointeurs dans les appels de fonction

En JavaScript, chaque appel de fonction est défini une nouvelle valeur pour cela. La valeur qui lui est attribuée est déterminée par la méthode utilisée pour appeler la fonction.

Principales façons de définir ce pointeur

Il existe principalement six façons de définir ce pointeur en JavaScript :

  • Appel de fonction normal : Par défaut, l'objet global (par exemple, une fenêtre) ou non défini (en mode strict).
  • Méthode Appel : Pointe vers l'objet propriétaire de la méthode.
  • **.apply() ou .call() : définit cela en fonction de l'argument passé.
  • Utilisation de new : Crée un nouvel objet et lui définit ceci.
  • **.bind() : renvoie une nouvelle fonction avec une valeur personnalisée, en utilisant .apply() en interne.
  • Fonctions ES6 Fat Arrow : Lie le lexical actuel à cette valeur (ne peut pas être remplacée).

Ceci dans les fonctions de rappel

Fonctions de rappel ne constituent pas une manière unique de définir cela. La fonction appelante détermine cette valeur lorsqu'elle appelle le rappel.

Exemple d'analyse

Dans votre extrait de code :

<code class="javascript">var randomFunction = function(callback) {
  var data = 10;
  callback(data);
};

var obj = {
  initialData: 20,
  sumData: function(data) {
    var sum = this.initialData + data;
    console.log(sum);
  },
  prepareRandomFunction: function() {
    randomFunction(this.sumData.bind(this));
  }
};

obj.prepareRandomFunction();</code>
  • obj.prepareRandomFunction() utilise un appel de méthode, le définissant sur obj.
  • randomFunction(this.sumData.bind(this)) utilise .bind(), qui lie la valeur actuelle de this (c'est-à-dire obj) à la fonction de rappel est renvoyée.

Par conséquent, lorsque randomFunction appelle le rappel, celui-ci est défini sur obj en raison de l'utilisation de .bind() dans this.sumData.bind(this).

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!

Déclaration:
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