JavaScript basiert auf Objekten. Arrays sind Objekte, Funktionen sind Objekte und Objekte sind natürlich Objekte. Was ist also ein Objekt? Ein Objekt ist eine Sammlung von Name-Wert-Paaren. Namen sind Zeichenfolgen, Werte können jedoch Zeichenfolgen, Zahlen, boolesche Werte oder Objekte (einschließlich Arrays und Funktionen) sein. Objekte werden in der Regel mithilfe von Hash-Tabellen implementiert, damit Werte schnell abgerufen werden können.
Wenn der Wert eine Funktion ist, können wir ihn als „Methode“ behandeln. Wenn eine Methode des Objekts ausgeführt wird, wird die Variable this auf das Objekt selbst gesetzt. Auf diese Weise kann die Methode über die Variable this auf die Instanz des Objekts zugreifen.
Objekte können durch „Konstruktoren“ erstellt werden. Ein Konstruktor ist eine Funktion, die ein initialisiertes Objekt enthält. Konstruktoren stellen Merkmale und Funktionen bereit, die denen von „Klassen“ in anderen Sprachen ähneln, einschließlich statischer Variablen und Methoden.
Alle Mitglieder eines Objekts sind öffentliche Mitglieder. Jede Funktion kann auf diese Mitglieder zugreifen, sie ändern oder löschen und natürlich auch neue Mitglieder hinzufügen. Es gibt zwei Hauptmethoden, um Mitglieder zu einem Objekt hinzuzufügen:
Diese Methode wird im Allgemeinen verwendet, um öffentliche Variablen einer Objektinstanz zu initialisieren. Die Variable this des Konstruktors wird verwendet, um Mitglieder zum Objekt hinzuzufügen:
function Container(param) { this.member = param; }
Erstellen Sie ein neues Objekt:
var myContainer = new Container('abc');
Dann hat die öffentliche Variable myContainer.member den Wert „ abc‘.
Diese Methode wird normalerweise zum Hinzufügen öffentlicher Methoden verwendet. Wenn das Objekt selbst nach einem Member durchsucht, aber nicht gefunden wird, wird das Prototyp-Member des Konstruktors verwendet. Dieser Prototypmechanismus implementiert die sogenannte „Vererbung“ objektorientiert und spart außerdem Speicher. Um allen Objekten, die mit demselben Konstruktor erstellt wurden, eine Methode hinzuzufügen, müssen wir nur eine Funktion zum Prototyp des Konstruktors hinzufügen:
Container.prototype.stamp = function (string) { return this.member + string; }
Dann können wir diese Methode aufrufen:
myContainer.stamp('def')
Gib 'abcdef' zurück.
Private Mitglieder werden vom Konstruktor erstellt. Normalerweise werden Variablen und Funktionsparameter, die im Konstruktor mit var deklariert wurden, zu privaten Mitgliedern.
function Container(param) { this.member = param; var secret = 3; var self = this; }
Dieser Konstruktor erstellt drei private Instanzvariablen: param, Secret und self.
function Container(param) { function dec() { if (secret > 0) { secret -= 1; return true; } else { return false; } } this.member = param; var secret = 3; var self = this; }
Die private Methode dec prüft das Instanzvariablengeheimnis. Wenn es größer als 0 ist, dekrementiert es um 1 und gibt true zurück, wenn es kleiner als 0 ist. Dadurch wird erreicht, dass die Dec-Funktion des von diesem Builder erstellten Objekts nur dreimal verwendet werden kann.
Konventionell erstellen wir eine private Variable self. Private Methoden können auf das Objekt selbst zugreifen. Dies ist jedoch nur eine Notlösung, da es einen Fehler in der „ECMAScript Language Specification“ gibt, der dazu führt, dass die Variable this der internen Funktion auf einen falschen Wert gesetzt wird.
Privilegierte Methoden werden hierüber im Konstruktor erstellt.
function Container(param) { function dec() { if (secret > 0) { secret -= 1; return true; } else { return false; } } this.member = param; var secret = 3; var self = this; this.service = function () { if (dec()) { return self.member; } else { return null; } }; }
Service ist eine privilegierte Methode. Die ersten drei Aufrufe von myContainer.service() geben „abc“ zurück, danach wird null zurückgegeben. Der Dienst greift auf das Geheimnis der privaten Variable zu, indem er die private Methode dec aufruft. Für andere Objekte und Methoden kann auf den Dienst zugegriffen werden, auf private Mitglieder kann jedoch nicht direkt zugegriffen werden.
Dieses Muster aus öffentlichen, privaten und privilegierten Mitgliedern entsteht aufgrund eines intrinsischen Mechanismus von JavaScript: Schließungen. Das bedeutet, dass eine innere Funktion immer auf die Variablen und Parameter ihrer äußeren Funktion zugreifen kann, auch wenn die äußere Funktion zurückgekehrt ist. Dies ist eine sehr leistungsstarke Funktion der JavaScript-Sprache. Es gibt keine Bücher über JavaScript-Programmierung, die zeigen, wie man davon profitiert, und sie erwähnen es nicht einmal.
Private und privilegierte Mitglieder können nur während der Objektinitialisierung erstellt werden, während öffentliche Mitglieder jederzeit hinzugefügt werden können.
function Constructor(...) { this.membername = value; } Constructor.prototype.membername = value;
function Constructor(...) { var self = this; var membername = value; function membername(...) {...} }
Hinweis: Dieser Code:
function membername(...) {...}
In der Tat ist die Abkürzung des folgenden Codes
var membername = function membername(...) {...};
function Constructor(...) { this.membername = function (...) {...}; }
Das obige ist der detaillierte Inhalt vonZusammenfassung von Beispielen grundlegender Konzepte wie Objekte, öffentliche Mitglieder und private Mitglieder in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!