Zugriffsbeschränkung in JavaScript-Funktionsdefinitionen
In JavaScript hängt die Zugänglichkeit von Variablen für Funktionen vom Umfang ab, in dem die Funktionen definiert sind. Private Variablen, die innerhalb eines Konstruktors deklariert werden, sind nur für Funktionen innerhalb des Gültigkeitsbereichs dieses Konstruktors zugänglich. Dies stellt eine Einschränkung dar, wenn Funktionen außerhalb des Konstruktors definiert werden, z. B. mithilfe der Prototypeigenschaft.
Prototypdefinierte Funktionen und private Variablen
Betrachten Sie den folgenden Code, bei dem a TestClass verfügt über eine private Variable „privateField“:
TestClass = function(){ var privateField = "hello"; this.nonProtoHello = function(){alert(privateField)}; }; TestClass.prototype.prototypeHello = function(){alert(privateField)};
In diesem Beispiel hat „nonProtoHello“, das im Konstruktor definiert ist, Zugriff auf „privateField“, während „prototypeHello“, das mit dem Prototyp definiert wurde, keinen Zugriff hat. Dies liegt daran, dass auf dem Prototyp definierte Funktionen nicht im Geltungsbereich des Konstruktors definiert sind.
Überschreiben des Zugriffs auf private Variablen
Es ist nicht möglich, prototypdefinierte Funktionen direkt zuzulassen Zugriff auf private Variablen. Dies würde im Wesentlichen einen Reverse-Scoping-Mechanismus schaffen, der von JavaScript nicht unterstützt wird.
Alternative: Getter und Setter
Um prototypdefinierten Funktionen die Manipulation privater Variablen zu ermöglichen, Mit diesem Objekt können Sie innerhalb des Konstruktors Getter und Setter erstellen. Diese öffentlichen Methoden können auf die privaten Variablen zugreifen und ermöglichen, dass diese durch die Prototypfunktionen geändert werden. Hier ist ein Beispiel:
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()); };
Das obige ist der detaillierte Inhalt vonWie können Sie von prototypdefinierten Funktionen in JavaScript auf private Variablen zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!