Maison >interface Web >js tutoriel >« this » et « obj » dans les fonctions littérales d'objet : quand dois-je utiliser lequel ?

« this » et « obj » dans les fonctions littérales d'objet : quand dois-je utiliser lequel ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-28 19:42:121005parcourir

`this` vs. `obj` in Object Literal Functions: When Should I Use Which?

Référence littérale d'objet dans votre propre fonction : explorer « ceci » par rapport à « obj »

Lors de la définition d'une fonction dans un littéral d'objet, vous peut se poser la question de savoir s'il faut référencer l'objet comme « ceci » ou directement en utilisant « obj ». Bien que les deux approches puissent sembler produire le même résultat, il y a des implications potentielles à prendre en compte.

Référencer « ceci » dans une fonction

Utiliser « ceci » dans la fonction suppose que la fonction sera toujours appelée comme méthode de l'objet. Cette approche peut entraîner des problèmes lors de l'appel de la fonction en dehors du contexte de l'objet. Par exemple :

var obj = {
  key1: "it",
  key2: function() { return this.key1 + " works!"; }
};

var func = obj.key2;  // Assign function to a new reference
alert(func());        // Error: Reference lost outside of object context

Référencer « obj » dans une fonction

Référencer directement « obj » dans la fonction résout le problème rencontré dans l'exemple précédent. Cependant, cela introduit un problème différent :

var obj = {
  key1: "it",
  key2: function() { return obj.key1 + " works!"; }
};

var newref = obj;
obj = { key1: "something else"; };

alert(newref.key2()); // Outputs "something else works"

Dans ce cas, si l'objet référencé par 'obj' est modifié, la fonction continuera à utiliser les propriétés de l'objet mises à jour. Cela peut conduire à un comportement inattendu, surtout si la référence de l'objet est modifiée pendant la durée de vie de la fonction.

Choisir la meilleure approche

Le choix entre référencer « ceci » et « obj » dépend du contexte spécifique et des risques potentiels associés à chaque approche. Si la fonction est uniquement destinée à être utilisée dans le contexte de l'objet, l'utilisation de « this » peut être préférable. Cependant, si la fonction peut être utilisée en dehors du contexte de l'objet ou s'il existe un risque de modification de la référence de l'objet, référencer directement « obj » offre une approche plus sûre.

Garantir l'intégrité de l'objet

Pour les scénarios où la préservation de l'intégrité de l'objet est cruciale, considérez ce qui suit options :

  • ES6 Const : L'utilisation du mot-clé const avec let dans l'objet garantit que la référence de l'objet ne peut pas être réaffectée.
  • Fermeture : L'utilisation d'une fermeture pour définir la référence de l'objet dans la fonction fournit un environnement sûr et isolé. environnement.
  • Liaison : La liaison de la fonction à l'objet à l'aide de .bind() garantit que la fonction fonctionne toujours dans le contexte correct.

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