Maison >interface Web >js tutoriel >Comment créer des méthodes privées en JavaScript et quelles sont les limites de cette approche ?

Comment créer des méthodes privées en JavaScript et quelles sont les limites de cette approche ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-03 08:55:03217parcourir

How can you create private methods in JavaScript, and what are the limitations of this approach?

Méthodes privées JavaScript

JavaScript, un langage de programmation largement utilisé, offre un large éventail de fonctionnalités permettant aux développeurs de créer des applications complexes et efficaces. Un aspect qui surgit souvent dans la programmation orientée objet est le besoin de méthodes privées, qui sont des méthodes accessibles uniquement dans la classe dans laquelle elles sont définies.

En JavaScript, les classes traditionnelles ne sont pas prises en charge, mais JavaScript les objets peuvent être utilisés pour obtenir des fonctionnalités similaires. Pour créer des méthodes publiques en JavaScript, vous les définirez généralement comme propriétés du prototype de la fonction constructeur. Par exemple, considérons l'exemple ci-dessous :

<code class="javascript">function Restaurant() {}

Restaurant.prototype.buy_food = function() {
  // Something here
}

Restaurant.prototype.use_restroom = function() {
  // Something here
}</code>

Comme vous pouvez le voir, ces méthodes sont accessibles et appelées normalement en utilisant restaurant.buy_food() et restaurant.use_restroom(), où restaurant est une instance de la classe Restaurant.

Maintenant, concentrons-nous sur le défi de la création de méthodes privées en JavaScript. Les méthodes privées sont des méthodes qui ne doivent être accessibles qu’au sein de la même classe. En d'autres termes, nous voulons définir une méthode appelée private_stuff qui peut être appelée à la fois par buy_food et use_restroom, mais pas par les utilisateurs de la classe.

Malheureusement, déclarer simplement une méthode comme propriété du prototype ne suffira pas. Je ne le rends pas privé. JavaScript ne prend pas en charge la véritable encapsulation, ce qui signifie que toute propriété d'un objet, y compris les méthodes, est accessible de l'extérieur.

Cependant, il existe une solution de contournement qui peut effectivement obtenir un résultat similaire. Les fermetures de fonctions JavaScript vous permettent de créer une portée privée au sein d'une fonction, rendant les variables déclarées dans cette portée inaccessibles en dehors de cette fonction.

Pour créer une méthode privée en utilisant cette approche, vous devez déclarer la méthode dans une fonction qui est appelé par la fonction constructeur. Par exemple :

<code class="javascript">function Restaurant() {
  var myPrivateVar;

  var private_stuff = function() {  // Only visible inside Restaurant()
    myPrivateVar = "I can set this here!";
  }

  this.use_restroom = function() {  // use_restroom is visible to all
    private_stuff();
  }

  this.buy_food = function() {   // buy_food is visible to all
    private_stuff();
  }
}</code>

Dans ce cas, la fonction private_stuff est déclarée dans la fonction constructeur Restaurant, ce qui signifie qu'elle n'est accessible que dans la portée de ce constructeur. Désormais, buy_food et use_restroom peuvent appeler private_stuff car ils y ont accès via leur portée partagée au sein du constructeur. Cependant, les utilisateurs externes de la classe ne peuvent pas appeler private_stuff car elle n'est pas exposée dans le prototype.

Il est important de noter que cette approche a une limitation : les méthodes privées définies dans une fermeture ne peuvent pas faire partie du prototype de la classe. Par conséquent, ils ne sont pas accessibles à l’aide du mot-clé this au sein de la classe. Cette limitation est inévitable en raison du fonctionnement des fermetures JavaScript.

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