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ę
@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)
@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.)
@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
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;
class Player {
constructor(id) {
this.id = id;
}
get id() {
return this.id;
}
set id(value) {
this._id = value;
}
}
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.)
ma być:
zwracanie wartości zmiennych