Staattisten Ominaisuuksien Tutkiminen Javascriptissä
Ohjelmoinnissa staattiset ominaisuudet mahdollistavat jaetun tiedon olemassaolon kaikissa luokan olioissa, mikä tekee niistä ihanteellisia yhtenäisen datan säilyttämiseen.
Mitä ovat staattiset ominaisuudet?
Staattiset ominaisuudet kuuluvat itse luokalle, eivät yksittäisille olioille. Tämä tarkoittaa, että staattiset ominaisuudet ovat yhteisiä kaikille olioille ja niihin pääsee käsiksi suoraan luokan kautta ilman olion luomista. Niitä käytetään usein apufunktioihin, vakioihin tai dataan, jonka tulee olla jaettu kaikkien luokan olioiden kesken.
Kuvittele yritys, jossa jokaisella työntekijällä (luokan olio) on omat henkilötietonsa (nimi, asema), mutta yrityksen osoite (staattinen ominaisuus) on sama kaikille työntekijöille. Osoite kuuluu yritykselle itselleen, ei yksittäiselle työntekijälle.
Staattisten ominaisuuksien määrittely ja käyttö
Staattinen ominaisuus määritellään käyttämällä static-avainsanaa luokan sisällä. Staattisiin ominaisuuksiin pääsee käsiksi vain luokan nimen kautta, ei luokan olioista.
1234567891011121314151617181920class Company { static headquarters = '123 Main St'; // Static property constructor(name) { this.name = name; // Instance property } getCompanyInfo() { return `${this.name} is located at ${Company.headquarters}`; } } const google = new Company('Google'); console.log(google.getCompanyInfo()); // Output: Google is located at 123 Main St const amazon = new Company('Amazon'); console.log(amazon.getCompanyInfo()); // Output: Amazon is located at 123 Main St // Accessing the static property directly from the class console.log(Company.headquarters); // Output: 123 Main St
Tässä esimerkissä headquarters-ominaisuus on jaettu kaikkien Company-luokan olioiden kesken. Sekä Google- että Amazon-oliot viittaavat samaan pääkonttorin osoitteeseen. Staattisiin ominaisuuksiin viitataan suoraan luokan nimellä (Company.headquarters), ei luokan olioiden kautta.
Miten staattiset ominaisuudet jaetaan kaikille luokan olioille
Koska staattiset ominaisuudet liitetään itse luokkaan, niitä ei kopioida jokaiselle oliolle erikseen. Kaikki luokan oliot viittaavat samaan staattiseen ominaisuuteen, mikä tekee siitä tehokkaan tavan tallentaa tietoa, jonka ei tarvitse muuttua olioittain.
Esimerkki: Luotujen olioiden laskuri
Oletetaan, että haluamme seurata, kuinka monta luokan oliota on luotu. Voimme käyttää staattista ominaisuutta instanssien määrän tallentamiseen ja kasvattaa sitä aina, kun uusi olio luodaan.
123456789101112131415161718192021222324class User { static count = 0; // Static property to track the number of users constructor(name) { this.name = name; User.count++; // Increment static property every time a new user is created } getUserInfo() { return `${this.name} is user number ${User.count}`; } } const user1 = new User('John'); const user2 = new User('Jane'); const user3 = new User('Alice'); // Accessing the static property directly from the class console.log(User.count); // Output: 3 (number of users created) // Each instance can see the total count of users console.log(user1.getUserInfo()); // Output: John is user number 3 console.log(user2.getUserInfo()); // Output: Jane is user number 3 console.log(user3.getUserInfo()); // Output: Alice is user number 3
Tässä esimerkissä staattista count-ominaisuutta kasvatetaan aina, kun uusi käyttäjä luodaan. Kaikki User-luokan oliot jakavat saman count-arvon, koska se kuuluu itse luokalle.
Staattisten ominaisuuksien edut
Koska staattiset ominaisuudet jaetaan kaikille olioille, tietoa ei tarvitse monistaa, mikä tekee koodista selkeämpää ja tehokkaampaa. Ne soveltuvat erityisen hyvin tiedon tallentamiseen, joka on sama kaikille olioille, kuten määritykset tai vakiot, ja auttavat ylläpitämään johdonmukaisuutta koko koodissa.
Käytännön esimerkki: Sovelluksen määritykset
Käytännön tilanteessa sovelluksessa voi olla määritysobjekti, joka tallentaa yhteiset asetukset koko sovellukselle. Staattiset ominaisuudet ovat erinomainen valinta tällaisiin käyttötarkoituksiin.
12345678910111213141516171819202122class AppConfig { static appName = 'QuirkApp Solutions'; // Shared configuration setting static version = '1.3.14'; // Shared configuration setting constructor(user) { this.user = user; } getUserConfig() { return `${this.user} is using ${AppConfig.appName} version ${AppConfig.version}`; } } const user1 = new AppConfig('Alice'); const user2 = new AppConfig('Bob'); console.log(user1.getUserConfig()); // Output: Alice is using QuirkApp Solutions version 1.3.14 console.log(user2.getUserConfig()); // Output: Bob is using QuirkApp Solutions version 1.3.14 // Accessing static properties directly from the class console.log(AppConfig.appName); // Output: QuirkApp Solutions console.log(AppConfig.version); // Output: 1.3.14
Tässä esimerkissä sovelluksen nimi ja versio jaetaan kaikille sovelluksen käyttäjille. Staattiset ominaisuudet appName ja version kuuluvat luokalle, eivätkä ne kopioidu jokaiselle ilmentymälle.
1. Mikä on staattinen ominaisuus?
2. Miten staattiseen ominaisuuteen päästään käsiksi?
3. Seuraavassa koodissa, mitä console.log(User.count); tulostaa?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Awesome!
Completion rate improved to 2.22
Staattisten Ominaisuuksien Tutkiminen Javascriptissä
Pyyhkäise näyttääksesi valikon
Ohjelmoinnissa staattiset ominaisuudet mahdollistavat jaetun tiedon olemassaolon kaikissa luokan olioissa, mikä tekee niistä ihanteellisia yhtenäisen datan säilyttämiseen.
Mitä ovat staattiset ominaisuudet?
Staattiset ominaisuudet kuuluvat itse luokalle, eivät yksittäisille olioille. Tämä tarkoittaa, että staattiset ominaisuudet ovat yhteisiä kaikille olioille ja niihin pääsee käsiksi suoraan luokan kautta ilman olion luomista. Niitä käytetään usein apufunktioihin, vakioihin tai dataan, jonka tulee olla jaettu kaikkien luokan olioiden kesken.
Kuvittele yritys, jossa jokaisella työntekijällä (luokan olio) on omat henkilötietonsa (nimi, asema), mutta yrityksen osoite (staattinen ominaisuus) on sama kaikille työntekijöille. Osoite kuuluu yritykselle itselleen, ei yksittäiselle työntekijälle.
Staattisten ominaisuuksien määrittely ja käyttö
Staattinen ominaisuus määritellään käyttämällä static-avainsanaa luokan sisällä. Staattisiin ominaisuuksiin pääsee käsiksi vain luokan nimen kautta, ei luokan olioista.
1234567891011121314151617181920class Company { static headquarters = '123 Main St'; // Static property constructor(name) { this.name = name; // Instance property } getCompanyInfo() { return `${this.name} is located at ${Company.headquarters}`; } } const google = new Company('Google'); console.log(google.getCompanyInfo()); // Output: Google is located at 123 Main St const amazon = new Company('Amazon'); console.log(amazon.getCompanyInfo()); // Output: Amazon is located at 123 Main St // Accessing the static property directly from the class console.log(Company.headquarters); // Output: 123 Main St
Tässä esimerkissä headquarters-ominaisuus on jaettu kaikkien Company-luokan olioiden kesken. Sekä Google- että Amazon-oliot viittaavat samaan pääkonttorin osoitteeseen. Staattisiin ominaisuuksiin viitataan suoraan luokan nimellä (Company.headquarters), ei luokan olioiden kautta.
Miten staattiset ominaisuudet jaetaan kaikille luokan olioille
Koska staattiset ominaisuudet liitetään itse luokkaan, niitä ei kopioida jokaiselle oliolle erikseen. Kaikki luokan oliot viittaavat samaan staattiseen ominaisuuteen, mikä tekee siitä tehokkaan tavan tallentaa tietoa, jonka ei tarvitse muuttua olioittain.
Esimerkki: Luotujen olioiden laskuri
Oletetaan, että haluamme seurata, kuinka monta luokan oliota on luotu. Voimme käyttää staattista ominaisuutta instanssien määrän tallentamiseen ja kasvattaa sitä aina, kun uusi olio luodaan.
123456789101112131415161718192021222324class User { static count = 0; // Static property to track the number of users constructor(name) { this.name = name; User.count++; // Increment static property every time a new user is created } getUserInfo() { return `${this.name} is user number ${User.count}`; } } const user1 = new User('John'); const user2 = new User('Jane'); const user3 = new User('Alice'); // Accessing the static property directly from the class console.log(User.count); // Output: 3 (number of users created) // Each instance can see the total count of users console.log(user1.getUserInfo()); // Output: John is user number 3 console.log(user2.getUserInfo()); // Output: Jane is user number 3 console.log(user3.getUserInfo()); // Output: Alice is user number 3
Tässä esimerkissä staattista count-ominaisuutta kasvatetaan aina, kun uusi käyttäjä luodaan. Kaikki User-luokan oliot jakavat saman count-arvon, koska se kuuluu itse luokalle.
Staattisten ominaisuuksien edut
Koska staattiset ominaisuudet jaetaan kaikille olioille, tietoa ei tarvitse monistaa, mikä tekee koodista selkeämpää ja tehokkaampaa. Ne soveltuvat erityisen hyvin tiedon tallentamiseen, joka on sama kaikille olioille, kuten määritykset tai vakiot, ja auttavat ylläpitämään johdonmukaisuutta koko koodissa.
Käytännön esimerkki: Sovelluksen määritykset
Käytännön tilanteessa sovelluksessa voi olla määritysobjekti, joka tallentaa yhteiset asetukset koko sovellukselle. Staattiset ominaisuudet ovat erinomainen valinta tällaisiin käyttötarkoituksiin.
12345678910111213141516171819202122class AppConfig { static appName = 'QuirkApp Solutions'; // Shared configuration setting static version = '1.3.14'; // Shared configuration setting constructor(user) { this.user = user; } getUserConfig() { return `${this.user} is using ${AppConfig.appName} version ${AppConfig.version}`; } } const user1 = new AppConfig('Alice'); const user2 = new AppConfig('Bob'); console.log(user1.getUserConfig()); // Output: Alice is using QuirkApp Solutions version 1.3.14 console.log(user2.getUserConfig()); // Output: Bob is using QuirkApp Solutions version 1.3.14 // Accessing static properties directly from the class console.log(AppConfig.appName); // Output: QuirkApp Solutions console.log(AppConfig.version); // Output: 1.3.14
Tässä esimerkissä sovelluksen nimi ja versio jaetaan kaikille sovelluksen käyttäjille. Staattiset ominaisuudet appName ja version kuuluvat luokalle, eivätkä ne kopioidu jokaiselle ilmentymälle.
1. Mikä on staattinen ominaisuus?
2. Miten staattiseen ominaisuuteen päästään käsiksi?
3. Seuraavassa koodissa, mitä console.log(User.count); tulostaa?
Kiitos palautteestasi!