Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Ominaisuuksien Hallinta Gettereillä ja Settereillä | JavaScript-luokkien ja Perinnän Hallinta
Edistynyt JavaScript-Osaaminen

bookOminaisuuksien Hallinta Gettereillä ja Settereillä

Getterit ja setterit tarjoavat tehokkaan tavan hallita olion ominaisuuksien käyttöä JavaScriptissä.

Mitä ovat getterit ja setterit?

JavaScriptissä getterit ja setterit ovat erityisiä metodeja, jotka mahdollistavat hallitun pääsyn olion ominaisuuksiin. Niiden avulla voidaan määrittää, miten ominaisuus haetaan ja muokataan, samalla suojaten olion sisäistä tilaa.

  • Getter: Metodi, jolla haetaan (get) ominaisuuden arvo;
  • Setter: Metodi, jolla asetetaan tai päivitetään ominaisuuden arvo.

Ajattele pankkiholvia. Holvi sisältää arvokkaita esineitä (yksityiset ominaisuudet), ja pankkivirkailija (getter/setter) toimii portinvartijana. Holviin ei pääse suoraan käsiksi, mutta virkailija voi noutaa tai päivittää esineitä puolestasi tiettyjen sääntöjen ja tarkistusten mukaisesti.

Getterien ja setterien määrittely ja käyttö

Getterit ja setterit määritellään get- ja set-avainsanoilla luokan sisällä. Kun ominaisuutta käytetään, getter aktivoituu automaattisesti. Vastaavasti, kun ominaisuutta muokataan, kutsutaan setteriä sen sijaan, että ominaisuutta muutettaisiin suoraan.

12345678910111213141516171819202122232425262728293031323334
class Animal { #type; // Private field constructor(name, type) { this.name = name; this.#type = type; // Assigning the private field } // Getter for the type property get type() { return this.#type; } // Setter for the type property set type(newType) { if (newType) { this.#type = newType; } else { console.log('Invalid type'); } } } const lion = new Animal('Lion', 'Wild'); // Using getter to access the private type console.log(lion.type); // Output: Wild // Using setter to modify the private type lion.type = 'Domestic'; console.log(lion.type); // Output: Domestic // Trying to set an invalid value lion.type = ''; // Output: Invalid type
copy

Tässä esimerkissä #type on yksityinen ominaisuus, ja määrittelemme getterin (get type()) sen arvon hakemiseen sekä setterin (set type(newType)) sen muuttamiseen. Setter sisältää validoinnin, joka estää virheellisten arvojen asettamisen, mikä havainnollistaa, kuinka yksityisten tietojen päivityksiä voidaan hallita.

Getterien ja setterien hyödyt

Hallittu pääsy

  • Getterit mahdollistavat määrittää, miten ominaisuuden arvoa käytetään, jolloin voit käsitellä tai muokata arvoa ennen sen palauttamista;
  • Setterit antavat hallinnan siihen, miten ominaisuutta päivitetään, mahdollistaen tietojen validoinnin tai muuntamisen ennen niiden asettamista yksityiseen kenttään.

Datan suojaus

  • Getterien ja setterien käyttö auttaa suojaamaan olion sisäistä tilaa tarjoamalla hallitun rajapinnan vuorovaikutukseen;
  • Yksityiset ominaisuudet voidaan pitää piilossa, ja voit paljastaa ulkoiselle koodille vain tarvittavat tiedot.

Joustavuus

Getterit ja setterit mahdollistavat lisälogiikan, kuten validoinnin tai lokituksen, lisäämisen ominaisuuksien käsittelyyn ilman, että ulkoisen koodin tapa käyttää oliota muuttuu.

Esimerkki: Käyttäjätili ja salasanan validointi

Kuvittele, että hallinnoit käyttäjätilejä, joissa salasanojen on täytettävä tietyt tietoturvavaatimukset. Setterin avulla voit varmistaa salasanan vahvuuden, kun taas getter voi palauttaa salasanasta peitetyn version näyttötarkoituksiin.

12345678910111213141516171819202122232425262728293031323334
class UserAccount { #password; // Private field constructor(username, password) { this.username = username; this.#password = password; } // Getter for password (returning a masked version) get password() { return '*'.repeat(this.#password.length); // Mask the password when retrieved } // Setter for password with validation set password(newPassword) { if (newPassword.length >= 8) { this.#password = newPassword; } else { console.log('Password must be at least 8 characters long'); } } } const user = new UserAccount('nick_feather', 'secret123'); // Accessing the password using the getter (masked) console.log(user.password); // Output: ********* // Setting a new valid password using the setter user.password = 'strongPassword123'; console.log(user.password); // Output: *************** // Trying to set an invalid password user.password = '123'; // Output: Password must be at least 8 characters long
copy

Tässä esimerkissä getter palauttaa salasanan peitetyn version piilottaakseen todellisen arvon, ja setter toteuttaa salasanan validoinnin varmistaen, että salasana on vähintään 8 merkkiä pitkä.

Esimerkki validointilogiikasta gettereiden ja settereiden avulla

Tässä on toinen esimerkki, jossa hallitaan henkilön ikää ja varmistetaan, että arvo pysyy järkevällä alueella:

12345678910111213141516171819202122232425262728293031323334
class Person { #age; // Private field constructor(name, age) { this.name = name; this.#age = age; } // Getter for age get age() { return this.#age; } // Setter for age with validation set age(newAge) { if (newAge > 0 && newAge < 120) { this.#age = newAge; } else { console.log('Invalid age'); } } } const peter = new Person('Peter', 30); // Accessing the age using the getter console.log(peter.age); // Output: 30 // Setting a new valid age using the setter peter.age = 35; console.log(peter.age); // Output: 35 // Trying to set an invalid age peter.age = 150; // Output: Invalid age
copy

Tämä esimerkki havainnollistaa, kuinka asettaja voi varmistaa, että ikä pysyy sallitulla alueella, estäen virheellisen datan tallentamisen.

1. Mikä on pääasiallinen tarkoitus käyttää hakijoita (getters)?

2. Mitä seuraava koodi tulostaa, kun suoritetaan console.log(user.password);?

question mark

Mikä on pääasiallinen tarkoitus käyttää hakijoita (getters)?

Select the correct answer

question mark

Mitä seuraava koodi tulostaa, kun suoritetaan console.log(user.password);?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 9

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Suggested prompts:

Can you explain the difference between getters and setters in more detail?

How do private fields work with getters and setters in JavaScript?

Can you provide more real-world examples of using getters and setters?

Awesome!

Completion rate improved to 2.22

bookOminaisuuksien Hallinta Gettereillä ja Settereillä

Pyyhkäise näyttääksesi valikon

Getterit ja setterit tarjoavat tehokkaan tavan hallita olion ominaisuuksien käyttöä JavaScriptissä.

Mitä ovat getterit ja setterit?

JavaScriptissä getterit ja setterit ovat erityisiä metodeja, jotka mahdollistavat hallitun pääsyn olion ominaisuuksiin. Niiden avulla voidaan määrittää, miten ominaisuus haetaan ja muokataan, samalla suojaten olion sisäistä tilaa.

  • Getter: Metodi, jolla haetaan (get) ominaisuuden arvo;
  • Setter: Metodi, jolla asetetaan tai päivitetään ominaisuuden arvo.

Ajattele pankkiholvia. Holvi sisältää arvokkaita esineitä (yksityiset ominaisuudet), ja pankkivirkailija (getter/setter) toimii portinvartijana. Holviin ei pääse suoraan käsiksi, mutta virkailija voi noutaa tai päivittää esineitä puolestasi tiettyjen sääntöjen ja tarkistusten mukaisesti.

Getterien ja setterien määrittely ja käyttö

Getterit ja setterit määritellään get- ja set-avainsanoilla luokan sisällä. Kun ominaisuutta käytetään, getter aktivoituu automaattisesti. Vastaavasti, kun ominaisuutta muokataan, kutsutaan setteriä sen sijaan, että ominaisuutta muutettaisiin suoraan.

12345678910111213141516171819202122232425262728293031323334
class Animal { #type; // Private field constructor(name, type) { this.name = name; this.#type = type; // Assigning the private field } // Getter for the type property get type() { return this.#type; } // Setter for the type property set type(newType) { if (newType) { this.#type = newType; } else { console.log('Invalid type'); } } } const lion = new Animal('Lion', 'Wild'); // Using getter to access the private type console.log(lion.type); // Output: Wild // Using setter to modify the private type lion.type = 'Domestic'; console.log(lion.type); // Output: Domestic // Trying to set an invalid value lion.type = ''; // Output: Invalid type
copy

Tässä esimerkissä #type on yksityinen ominaisuus, ja määrittelemme getterin (get type()) sen arvon hakemiseen sekä setterin (set type(newType)) sen muuttamiseen. Setter sisältää validoinnin, joka estää virheellisten arvojen asettamisen, mikä havainnollistaa, kuinka yksityisten tietojen päivityksiä voidaan hallita.

Getterien ja setterien hyödyt

Hallittu pääsy

  • Getterit mahdollistavat määrittää, miten ominaisuuden arvoa käytetään, jolloin voit käsitellä tai muokata arvoa ennen sen palauttamista;
  • Setterit antavat hallinnan siihen, miten ominaisuutta päivitetään, mahdollistaen tietojen validoinnin tai muuntamisen ennen niiden asettamista yksityiseen kenttään.

Datan suojaus

  • Getterien ja setterien käyttö auttaa suojaamaan olion sisäistä tilaa tarjoamalla hallitun rajapinnan vuorovaikutukseen;
  • Yksityiset ominaisuudet voidaan pitää piilossa, ja voit paljastaa ulkoiselle koodille vain tarvittavat tiedot.

Joustavuus

Getterit ja setterit mahdollistavat lisälogiikan, kuten validoinnin tai lokituksen, lisäämisen ominaisuuksien käsittelyyn ilman, että ulkoisen koodin tapa käyttää oliota muuttuu.

Esimerkki: Käyttäjätili ja salasanan validointi

Kuvittele, että hallinnoit käyttäjätilejä, joissa salasanojen on täytettävä tietyt tietoturvavaatimukset. Setterin avulla voit varmistaa salasanan vahvuuden, kun taas getter voi palauttaa salasanasta peitetyn version näyttötarkoituksiin.

12345678910111213141516171819202122232425262728293031323334
class UserAccount { #password; // Private field constructor(username, password) { this.username = username; this.#password = password; } // Getter for password (returning a masked version) get password() { return '*'.repeat(this.#password.length); // Mask the password when retrieved } // Setter for password with validation set password(newPassword) { if (newPassword.length >= 8) { this.#password = newPassword; } else { console.log('Password must be at least 8 characters long'); } } } const user = new UserAccount('nick_feather', 'secret123'); // Accessing the password using the getter (masked) console.log(user.password); // Output: ********* // Setting a new valid password using the setter user.password = 'strongPassword123'; console.log(user.password); // Output: *************** // Trying to set an invalid password user.password = '123'; // Output: Password must be at least 8 characters long
copy

Tässä esimerkissä getter palauttaa salasanan peitetyn version piilottaakseen todellisen arvon, ja setter toteuttaa salasanan validoinnin varmistaen, että salasana on vähintään 8 merkkiä pitkä.

Esimerkki validointilogiikasta gettereiden ja settereiden avulla

Tässä on toinen esimerkki, jossa hallitaan henkilön ikää ja varmistetaan, että arvo pysyy järkevällä alueella:

12345678910111213141516171819202122232425262728293031323334
class Person { #age; // Private field constructor(name, age) { this.name = name; this.#age = age; } // Getter for age get age() { return this.#age; } // Setter for age with validation set age(newAge) { if (newAge > 0 && newAge < 120) { this.#age = newAge; } else { console.log('Invalid age'); } } } const peter = new Person('Peter', 30); // Accessing the age using the getter console.log(peter.age); // Output: 30 // Setting a new valid age using the setter peter.age = 35; console.log(peter.age); // Output: 35 // Trying to set an invalid age peter.age = 150; // Output: Invalid age
copy

Tämä esimerkki havainnollistaa, kuinka asettaja voi varmistaa, että ikä pysyy sallitulla alueella, estäen virheellisen datan tallentamisen.

1. Mikä on pääasiallinen tarkoitus käyttää hakijoita (getters)?

2. Mitä seuraava koodi tulostaa, kun suoritetaan console.log(user.password);?

question mark

Mikä on pääasiallinen tarkoitus käyttää hakijoita (getters)?

Select the correct answer

question mark

Mitä seuraava koodi tulostaa, kun suoritetaan console.log(user.password);?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 9
some-alt