Statyczna zmienna w Klasie Javascirpt

Statyczna zmienna w Klasie Javascirpt
Kandif
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:231
0

Witam,

Szukałem w internecie ale wygląda na to że nie ma, więc pytam asekuracyjnie. Czy jest możliwość stworzenia czegoś podobnego do zmiennych statycznych w Javie tyle że w Javascirpt(nodejs).
Chciałbym przy tworzeniu obiektu klasy mieć dostęp do tej samej zmiennej i ją edytować z poziomu każdego obiektu.
Istnieje taka możliwość?


"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'
0
Kandif
Statyczna metoda a statyczna zmienna to inne bajki.
AQ
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 5 lat
  • Postów:23
3
Kopiuj
class Dog {
  constructor() {
	Dog.dogsCount++
  }
}

Dog.dogsCount = 0
Kandif
Ten sposób jest problematyczny w przypadku modułu ale wymyśliłem to samo, tylko na podstawie tworzenia osobnej pustej klasy i tam zapisywałem co potrzebowałem, więc dzięki.
AQ
W jaki sposób jest to problematyczny przy module? Moduły w nodzie są cacheowane (z małymi wyjątkami), więc zawsze masz referencję do tej samej klasy.
Kandif
Gdy export jest w tej samej linii co klasa, to nie dodanie pola z po za jej obrębu jest odczytywane jako błąd.
AQ
Fakt, module.exports = class Dog {} jest traktowane jako class expression. Możesz zrobić to tak: const Dog = module.exports = class Dog {} ale IMO najczytelniej zrobić po prostu na dole module.exports = Dog
AQ
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 5 lat
  • Postów:23
1

Jest też taka opcja na statyczne zmienne, w tym wariancie masz do niej dostęp przez this, jak w Javie.

Kopiuj
   // Dog.js

    let dogsCount = 0;

    class Dog {
      constructor() {
        this.dogsCount++
      }

      set dogsCount(val) {
         dogsCount = val;
      }

      get dogsCount() {
        return dogsCount;
      }
    }


    // index.js
   const Dog = require('./Dog')

  const burek = new Dog();
  const azor = new Dog();

 
  burek.dogsCount = 5
 
  azor.dogsCount // 5 -  obie instancje korzystają z "let dogsCount"
edytowany 2x, ostatnio: Aqu
Kandif
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:231
0

To ja może od razu podam jak ja to rozwiązałem.

Kopiuj
class GłównaKlasa{
       dodajwartosc(naglowek,jakaswartosc){
                  StatyczneZmienne.zmienna[naglowek]=jakaswartosc;
        }
}

class StatyczneZmienne{}
StatyczneZmienne.zmienna={};

Takiego czegoś potrzebowałem, co prawda można zrobić to jak wspomniałeś w komentarzu.


"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.