Deo zbornika Učimo Javascript

Vežba: prenos sredstava pomoću klase

Implementiraj prenos sredstava pomoću klase. Napravi klasu Musterija koja ima svojstva ime i stanje, i metodu prenesiSredstva, koja prima dva argumenta: primalac i iznos. Metoda treba da skida sredstva sa sopstvenog stanja i prebacuje na stanje primaoca.

Za početak je dovoljno da kod radi u konzoli, odnosno da se putem konzole mogu instancirati objekti i prebacivati sredstva međusobno.

class Musterija {
  constructor(ime, stanje) {
    this.ime = ime
    this.stanje = stanje
  }

  prenesiSredstva(primalac, iznos) {
    if (iznos > this.stanje) {
      return console.log("Nema toliko novca na računu.")
    }
    this.stanje -= iznos
    primalac.stanje += iznos
    console.log("Sredstva su uspešno prebačena.")
  }
}

const musterija1 = new Musterija("Pera Perić", 30000)
const musterija2 = new Musterija("Ana Stanić", 2000)

musterija2.prenesiSredstva(musterija1, 3000)

Napredna vežba

Napravi korisnički interfejs. Potrebno je da korisnici mogu praviti nove objekte i prenositi sredstva sa računa na račun, putem web stranice.

<!DOCTYPE html>

<label>Ima i prezime: <input type="text" id="novo-ime"></label>
<label>Stanje: <input type="number" id="novo-stanje"></label>
<button id="kreator-dugme">Napravi mušteriju</button>

<div id="okvir"></div>

<script>
const novoIme = document.getElementById('novo-ime')
const novoStanje = document.getElementById('novo-stanje')
const kreatorDugme = document.getElementById('kreator-dugme')
const okvir = document.getElementById('okvir')

const musterije = []
let brojac = 1602231000

class Musterija {
  constructor(ime, stanje) {
    this.ime = ime ? ime : "Anonimus"
    this.stanje = Number(stanje)
    this.brojRacuna = ++brojac
    this.render()
    musterije.push(this)
  }

  prenesiSredstva(iznos, brojRacuna) {
    const primalac = musterije.find(musterija => musterija.brojRacuna == brojRacuna)
    if (iznos > this.stanje) {
      return alert("Nema toliko novca na računu.")
    }
    this.stanje -= iznos
    primalac.stanje += iznos
    this.renderAll()
  }

  renderAll() {
    okvir.innerHTML = ''
    musterije.map(musterija => musterija.render())
  }

  render() {
    const div = document.createElement('div')
    const ime = document.createElement('h3')
    const brojRacuna = document.createElement('p')
    const stanje = document.createElement('p')
    const primalac = document.createElement('input')
    const iznos = document.createElement('input')
    const dugme = document.createElement('button')

    primalac.placeholder = "broj računa primaoca"
    primalac.type = "number"
    iznos.type = "number"
    iznos.placeholder = "traženi iznos"
    ime.innerText = this.ime
    brojRacuna.innerText = "Broj računa: " + this.brojRacuna
    stanje.innerText = "Stanje: " + this.stanje
    dugme.innerText = "Prebaci"
    dugme.addEventListener("click", () => this.prenesiSredstva(Number(iznos.value), primalac.value))

    div.appendChild(ime)
    div.appendChild(brojRacuna)
    div.appendChild(stanje)
    div.appendChild(iznos)
    div.appendChild(primalac)
    div.appendChild(dugme)
    okvir.appendChild(div)
  }
}

kreatorDugme.addEventListener('click', () => new Musterija(novoIme.value, novoStanje.value))

new Musterija("Pera Perić", 30000)
new Musterija("Ana Stanić", 2000)
new Musterija("Sima Simić", 100)
</script>