JavaScript

JAVASCRIPTIIN LIITTYVÄÄ KOULUTUSTA VUONNA 2025!

Kurssit saatavilla kautta Suomen. Tule ja varaa oma koulutustapahtumasi heti! Koulutuksen järjestää asiantuntijasi Koulutus- ja konsultointipalvelu KK Mediat.

OOP-JavaScript: Olion ominaisuudet

Olion ominaisuudet toimivat kuten muuttujat, mutta ne ovat olion sisäisesti määriteltyjä ja kuuluvat yksinomaan kyseiseen olioon. Esimerkiksi Auto-olion ominaisuuksia voivat olla merkki ja malli.

Ominaisuuden lisääminen literaalilla luotuun objektiin

Literaalilla luotuun objektiin lisätään ominaisuuksia käyttämällä syntaksia ominaisuus: arvo. Jos olioon halutaan lisätä useita ominaisuuksia, ne erotellaan toisistaan pilkulla. Esimerkiksi:


const auto = {
  merkki: "Toyota",
  malli: "Corolla",
  väri: "Punainen",
  huippunopeusKmh: 180
};

Ominaisuuden luominen konstruktorifunktiossa

Ominaisuuden luominen konstruktorifunktion sisällä hyödyntää this-viittausta. this-viittaus osoittaa juuri siihen olion ilmentymään joka on luotavana. Tällä tavoin jokainen samaisesta oliosta luotu ilmentymä saa omat, oikeaan ilmentymään sidotut arvot käyttöönsä.


function Auto(merkki, malli, väri,nopeus) {
  this.merkki = merkki;
  this.malli = malli;
  this.väri = väri;
  this.huippunopeusKmh = nopeus;
}

const keijonAuto = new Auto("Audi", "A4", "Musta",180);


Ominaisuuden luominen Class-rakenteessa

this-viittausta käytetään myös ominaisuuksien määrittämiseen Class-rakenteen sisällä. Yleinen käytäntö on määrittää ominaisuudet rakentajametodin (constructor) sisään, jolloin ne ovat käytettävissä heti, kun ilmentymä luodaan. Tämä lähestymistapa auttaa pitämään luokkarakenteen keskitettynä, selkeänä ja ennustettavana. Vaikka ominaisuuksia voi määrittää myös constructor-metodin ulkopuolella, sitä ei yleensä suositella.


class Auto {
  constructor(merkki, malli, väri,nopeus) {
    this.merkki = merkki;
    this.malli = malli;
    this.väri = väri;
    this.huippunopeusKmh = nopeus;
  }
}

const miikanAuto = new Auto("Opel", "Corsa", "Sininen", 165);

Ominaisuuden arvon asettaminen ja hakeminen

Ominaisuuden arvo voidaan asettaa tai hakea seuraavalla syntaksilla:


// esimerkki asettamisesta
auto.merkki = "Toyota";

// esimerkki noutamisesta
console.log(auto.merkki);


JavaScriptin ES6-versio esitteli ominaisuuksien asettamiseen ja hakemiseen getter- ja setter-menetelmät. Ne kannattaa ottaa käyttöön, kun ominaisuuksien arvoja halutaan hallita ja validoida automaattisesti.


class Auto {
  constructor(merkki, malli, väri,nopeus) {
    this.merkki = merkki;
    this.malli = malli;
    this.väri = väri;
    this.huippunopeusKmh = nopeus;
  }
  
  // Getter, joka palauttaa nopeuden
  get huippunopeus() {
    return this.huippunopeusKmh;
  }

  // Setter, joka asettaa nopeuden ja tarkistaa, että se on järkevä
  set huippunopeus(nopeus) {
    if (nopeus >= 0 && nopeus <= 400) {
      this.huippunopeusKmh = nopeus;
    } else {
      console.log("Virhe: Nopeus täytyy olla välillä 0 ja 400 km/h.");
    }
  }
}


const auto = new Auto("Toyota", "Corolla", "Punainen", 180);
console.log(auto.huippunopeus); // 180  - lukee arvon getterin avulla

auto.huippunopeus = 220; // asettaa nopeuden Setterin avulla

auto.huippunopeus = 500; // Virheellinen arvo, ei muuta nopeutta
  

OOP-JavaScript: Olion metodit

Olion metodi on toiminto, joka on liitetty olioon ja jonka avulla olio voi suorittaa tietyn tehtävän hyödyntäen sisäistä dataansa. Yksinkertaistuna metodia voi ajatella funktiona, joka on liitetty olioon ja joka hyödyntää olion ominaisuuksia. Esimerkiksi Auto-olion metodi voisi olla naytaTiedot, joka käyttää ilmentymän ominaisuuksia palauttaakseen arvon.

Nuolifunktioita (=>) ei yleensä käytetä metodirakenteiden ilmaisemiseen JavaScriptissä, koska ne eivät määrittele omaa this-kontekstia. Sen sijaan ne perivät this-arvon ympäröivästä, ulkoisesta kontekstista. Käytännössä tämä tarkoittaa, että nuolifunktiot eivät sovellu oliopohjaiseen JavaScriptin kirjoittamiseen.

Metodin luominen objektin literaalille

Metodin lisääminen objektin literaalille tapahtuu syntaksilla metodi: function(){}. Jos literaalissa on useita metodeja, ne erotetaan toisistaan pilkulla. Esimerkiksi:


const auto = {
  merkki: "Toyota",
  malli: "Corolla",
  väri: "Punainen",
  huippunopeusKmh: 180, 
  näytäTiedot: function() {
    console.log(`${this.merkki} ${this.malli} (${this.väri})`);
  }
};

auto.näytäTiedot(); // Toyota Corolla (Punainen)


Metodien luominen konstruktorifunktiolle

Metodien luominen konstruktorifunktion sisällä hyödyntää this-viittausta ja funktioilmaisua. Koska oliosta voi olla olemassa lukuisia ilmentymiä ja metodit halutaan sitoa aina kuhunkin ilmentymään, avuksi tulee taas kerran this-viittaus. Sen avulla metodi viittaa oikeassa kontekstissa.


function Auto(merkki, malli, väri,nopeus) {
  this.merkki = merkki;
  this.malli = malli;
  this.väri = väri;
  this.huippunopeusKmh = nopeus;
  this.omistaja = "Keijo"
  this.näytäTiedot = function() {
    console.log(`${this.omistaja}: ${this.merkki} ${this.malli} (${this.väri})`);
  };
}

const keijonAuto = new Auto("Audi", "A4", "Musta",180);
keijonAuto.näytäTiedot(); // Keijo: Audi A4 (Musta)


Metodin luominen Class-rakenteessa

Class-rakenteessa metodi luodaan käyttämällä funktiomäärittelyn syntaksia, mutta ilman function-avainsanaa.


class Auto {
  constructor(merkki, malli, väri,nopeus) {
    this.merkki = merkki;
    this.malli = malli;
    this.väri = väri;
	this.huippunopeusKmh = nopeus;
	this.omistaja = "Miikka";
  }
  
  näytäTiedot() {
    console.log(`${this.omistaja}: ${this.merkki} ${this.malli} (${this.väri})`);
  }
}

const miikanAuto = new Auto("Opel", "Corsa", "Sininen", 165);
miikanAuto.näytäTiedot(); // Miikka: Opel Corsa (Sininen)