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

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

Patricia Arquette
Patricia Arquetteoriginal
2024-10-29 00:07:30836parcourir

How Can I Access Private Members from Prototype-Defined Functions in JavaScript?

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

En JavaScript, lors de la définition de méthodes à l'intérieur du constructeur d'une classe, vous pouvez accéder à des variables privées variables déclarées dans le constructeur. Cependant, lors de la définition de méthodes sur le prototype, l'accès à ces variables privées devient problématique.

Pour illustrer :

<code class="js">function TestClass() {
    var privateField = "hello";
    this.nonProtoHello = function() { alert(privateField); };
}
TestClass.prototype.prototypeHello = function() { alert(privateField); };</code>

L'appel de t.nonProtoHello() accède correctement au privateField privé, mais t.prototypeHello () renvoie une erreur. En effet, les méthodes définies par le prototype ne sont pas définies dans la portée du constructeur et ne peuvent donc pas accéder à ses variables locales.

Malheureusement, il n'existe aucun moyen d'accéder directement aux variables privées à partir des fonctions définies par le prototype. Cependant, vous pouvez obtenir des fonctionnalités similaires en utilisant des getters et des setters.

<code class="js">function Person(name, secret) {
    // Public
    this.name = name;

    // Private
    var secret = secret;

    // Public methods have access to private members
    this.setSecret = function(s) {
        secret = s;
    }

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

// Must use getters/setters 
Person.prototype.spillSecret = function() { alert(this.getSecret()); };</code>

Dans cet exemple, le secret de la variable privée est accessible aux méthodes définies par le prototype via les fonctions getter et setter.

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