Maison > interface Web > js tutoriel > Comment puis-je accéder aux variables membres privées à partir de fonctions définies par un prototype en JavaScript ?

Comment puis-je accéder aux variables membres privées à partir de fonctions définies par un prototype en JavaScript ?

Patricia Arquette
Libérer: 2024-10-27 03:11:30
original
579 Les gens l'ont consulté

How can I access private member variables from prototype-defined functions in JavaScript?

Accès aux variables membres privées à partir de fonctions définies par prototype

En JavaScript, les variables privées, déclarées dans le constructeur, ne sont pas directement accessibles aux méthodes défini dans le prototype. Ce scénario peut être observé dans l'extrait de code suivant :

TestClass = function(){
  var privateField = "hello";
  this.nonProtoHello = function(){alert(privateField)};
};
TestClass.prototype.prototypeHello = function(){alert(privateField)};

// This executes successfully:
t.nonProtoHello()

// This fails:
t.prototypeHello()
Copier après la connexion

Ce comportement se produit car les méthodes définies dans le constructeur ont accès aux variables privées en raison de leur accès à la portée dans laquelle elles sont définies. Cependant, les méthodes définies par le prototype ne sont pas créées dans le cadre du constructeur et n'ont pas accès à ses variables locales.

Répondre au besoin d'accès

Bien qu'il n'existe aucun moyen direct pour accorder l'accès aux variables privées pour les méthodes définies par un prototype, il existe des approches alternatives pour obtenir la fonctionnalité souhaitée :

  • Getters et Setters : Créez des getters et des setters sur cet objet pour fournir un accès contrôlé aux variables privées. Les méthodes définies par le prototype, ainsi que tout autre code ayant accès à l'objet, peuvent utiliser ces getters et setters.

Voici un exemple :

function Person(name, secret) {
  // public
  this.name = name;

  // private
  var secret = secret;

  // public methods with controlled access
  this.setSecret = function(s) {
    secret = s;
  }

  this.getSecret = function() {
    return secret;
  }
}

// Prototype-defined method using getters
Person.prototype.spillSecret = function() { alert(this.getSecret()); };
Copier après la connexion
  • Accès indirect : Bien que les méthodes définies par le prototype ne puissent pas accéder directement aux variables privées, elles peuvent interagir avec les fonctions wrapper qui y ont accès. Cela permet un accès indirect sans exposer les variables privées directement au prototype.

En résumé, même si l'accès aux variables privées à partir de méthodes définies par le prototype est intrinsèquement restreint, l'utilisation de getters et setters ou d'un accès indirect offre des solutions flexibles. pour obtenir un accès contrôlé à ces variables.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal