Ändern aller Mitglieder einer Klasse über eine Instanzmethode

8

Ist es in JavaScript möglich, eine Instanzmethode für ein Objekt aufzurufen, das alle seine Geschwister betrifft?

Beispiel: Ich habe die folgende Klasse:

%Vor%

Kann ich eine activateAll -Methode erstellen, die alle Instanzen der Klasse Thing aktivieren kann?

Ich brauche this.active als Instanz Variable.

    
LukeP 24.05.2015, 23:47
quelle

2 Antworten

8

Sie können alle Instanzen in einem Array speichern und sie iterieren, um ihre Eigenschaft active zu ändern. Wenn Sie jedoch alle Instanzen speichern, bedeutet dies, dass keine Müllsammlung stattfindet. Sie werden also Speicher verschwenden. Und wenn das Array riesig wird, wird das Iterieren langsam.

%Vor%

Ein besserer Weg wäre die Definition einer gemeinsamen Standardaktivität und Standardpriorität sowie einer eigenen Aktivität und einer eigenen Priorität für jede Instanz. Dann,

  • Um die Aktivität einer Instanz abzurufen, vergleichen Sie die Standardpriorität und die eigene Priorität. Der Größte entscheidet darüber, ob die Standardaktivität oder die eigene Aktivität zurückgegeben werden soll.
  • Um die Aktivität einer Instanz festzulegen, aktualisieren Sie die eigene Aktivität. Wenn die Standardaktivität größer ist, erhöhen Sie die eigene Priorität.
  • Um die Aktivität aller Instanzen festzulegen, aktualisieren Sie die Standardaktivität und erhöhen Sie die Standardpriorität.
%Vor%

Wenn activateAll viele Male aufgerufen wird und Sie defPriority nicht unnötig erhöhen möchten, können Sie eine boolesche Variable hinzufügen, um zu wissen, ob eine eigene Eigenschaft die Standardeigenschaft erreicht hat.

%Vor%

Beachten Sie in jedem Fall, dass das Hinzufügen dieser Methode im Prototyp nicht sinnvoll ist. Gemäß den OOP-Prinzipien sollte das Aufrufen einer Methode in einer Variablen keine Auswirkungen auf andere Variablen haben. Erwägen Sie stattdessen, die Methode dem Konstruktor selbst hinzuzufügen.

Ein vollständiges Beispiel könnte so aussehen:

%Vor%
    
Oriol 25.05.2015, 00:17
quelle
1

Sie benötigen ein Array instances , wie folgt:

%Vor%

Ändern Sie Thing wie folgt:

%Vor%

Implementieren Sie Methoden durch Iteration:

%Vor%

Sie können dies wie folgt verallgemeinern:

%Vor%     
Lajos Arpad 25.05.2015 00:08
quelle

Tags und Links