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()
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 :
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()); };
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!