Name_in_progress
#javascript #js
Mam przykładową klasę

class Player {
constructor(id) {
this.id = id;
}

Potem tworze obiekt tej klasy gdzieśtam
const player = new Player(1);
I teraz pytanie, czy chcąc uzyskać id obiektu player powinienem udawać że nie mam dostępu do wewnętrzej zmiennej i zrobić w klasie metodę

getId() { return this.id }
czy po prostu pisać

const playerId = player.id;
  • Najlepsze
  • Wszystkie komentarze
Marmite
@Name_in_progress: udawaj, tak powinna działać hermetyzacja i dodatkowo takie podejście jest bardziej praktyczne (jak będziesz chcieć dorzucić jakieś side effecty do gettera/settera to zrobisz to w jednym miejscu a nie w tysiącu)
rbielawski
rbielawski
@Name_in_progress: jak coś to w es6 możesz też robić 'legitne' getter/settery, a więc na przykład

class Player {

constructor(id) {
this.
H.....0
H.....0
@rbielawski: Nigdy mi się coś takiego nie podobało. Zbyt verbose jak dla mnie. Do tego ta konwencja z underscorem jest po prostu brzydka.
M.....e
M.....e
Udawać.
Name_in_progress
@Matarese: Tak czułem i robiłem do tej pory, ale chciałbym jakieś bardziej rozwiniete wyjaśnienie :) No i są jeszcze gettery z ES6
M.....e
M.....e
Kolega wyżej wyjaśnił.
Fastboot
@Name_in_progress: Jeżeli chcesz to robić w ES5 to zainteresuj się wzorcem projektowym o nazwie "Revealing Module".
Wtedy będziesz miał enkapsulację i nic nie musisz udawać bo nie masz dostępu do pól obiektu. Musisz wtedy utworzyć metody (getery setery) ale uwaga na przekazywanie zmiennych z modułu bo w JS nie ma referencji do prymitywów (Number, String, boolean itd.)
Name_in_progress
@rbielawski: Właśnie te gettery i settery z ES6 wydają mi się zaburzać koncept troche bo odwołuje sie do nich tak jak bezposrednio do właściwosci czyli obiekt.właściwość, nie widać na pierwszy rzut oka że pod tym moze sie kryć jakaś funkcja
Fastboot
@Fastboot:

ale uwaga na przekazywanie zmiennych

ma być:
zwracanie wartości zmiennych
rbielawski
rbielawski
@Name_in_progress: to chyba nie jest cecha getterów i setterów tylko w es6 :)
veranoo
veranoo
@Marmite: side effecty w geterze weź potem to debugguj. Tylko Pure funcion
Marmite
@veranoo: setter w sumie chyba nie może być nazwany pure function, nawet bez side effectów ( ͡° ͜ʖ ͡°) to był tylko przykład
rbielawski
rbielawski
@HAL__9000 też rzadko używam, ale po prostu jest taka opcja.