<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>webdevlpr</title>
  <subtitle>Blog o razvoju web-a.</subtitle>
  <updated>2023-08-02T19:53:08Z</updated>
  <link href="https://webdevlpr.com/feed/feed.xml" rel="self"/>
  <link href="https://webdevlpr.com/"/>
  <author>
    <name>Marijana Sevo</name>
    <email>marijana@webdevlpr.com</email>
  </author>
  <id>https://webdevlpr.com/</id>
  
  <entry>
    <title>Petlja dogadjaja ili event loop</title>
    <link href="https://webdevlpr.com/posts/petlja-dogadjaja-ili-event-loop/"/>
    <id>https://webdevlpr.com/posts/petlja-dogadjaja-ili-event-loop/</id>
    <updated>2023-04-02T17:00:00Z</updated>
    <summary>JavaScript se izvrsava u jednoj niti (single-threaded), sto znaci da sve operacije koje obavlja JavaScript jesu sinhrone. Petlja dogadjaja ili event loop je super moc koja omogucava da JavaScript djeluje kao neblokirajuci asinhroni jezik.</summary>
    <content type="html">&lt;p&gt;JavaScript se izvrsava u jednoj niti (&lt;i&gt;single-threaded&lt;/i&gt;) 🧵, sto znaci da sve operacije koje obavlja JavaScript jesu sinhrone i blokirajuce. Petlja dogadjaja (event loop) je razlog zasto JavaScript djeluje kao asinhroni neblokirajuci jezik. Sve ovo odrzava nekoliko pametnih struktura podataka iza sebe, ali hajde da se vratimo na pocetak.&lt;/p&gt;
&lt;h2 id=&quot;sinhrono-vs-asinhrono-izvrsavanje&quot;&gt;Sinhrono vs asinhrono izvrsavanje&lt;/h2&gt;
&lt;p&gt;JavaScript je po svojoj prirodi sinhroni programski jezik, sto znaci da se operacije izvrsavaju jedna za drugom u nizu, &lt;u&gt;na nacin da se jedna operacija mora zavrsiti prije nego se predje na sledecu&lt;/u&gt;.&lt;/p&gt;
&lt;p&gt;To moze biti problem kada se radi o operacijama koje traze vise vremena, kao sto su zahtijevanje podataka preko mreze, citanje/zapisivanje velikih fajlova itd. U takvim slucajevima, korisnicki interfejs je blokiran dok se operacija ne zavrsi, sto vodi ka losem korisnickom iskustvu i 😠. Mozemo zaboraviti na interaktivnost sa stranicom dok se ova velika operacija ne zavrsi.&lt;/p&gt;
&lt;p&gt;Ali asinhrono izvrsavanje instrukcija je jedan od znacajnih razloga zasto je&lt;br /&gt;
JavaScript tu gdje jeste. Drugim rijecima, umjesto da cekamo da jedna operacija zavrsi prije nego pocne druga, instrukcije se mogu nastaviti izvrsavati paralelno.&lt;/p&gt;
&lt;figure&gt; 
&lt;svg viewBox=&quot;0 0 1037 490&quot; fill=&quot;none&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
  &lt;g id=&quot;Frame 1&quot;&gt;
    &lt;g id=&quot;Group 1&quot;&gt;
      &lt;rect id=&quot;zadatak 8&quot; x=&quot;575&quot; y=&quot;365&quot; width=&quot;159&quot; height=&quot;50&quot; fill=&quot;#ECE6AD&quot;&gt;&lt;/rect&gt;
      &lt;rect id=&quot;zadatak 7&quot; x=&quot;575&quot; y=&quot;302&quot; width=&quot;107&quot; height=&quot;50&quot; fill=&quot;#ECE6AD&quot;&gt;&lt;/rect&gt;
      &lt;rect id=&quot;zadatak 6&quot; x=&quot;575&quot; y=&quot;232&quot; width=&quot;67&quot; height=&quot;50&quot; fill=&quot;#ECE6AD&quot;&gt;&lt;/rect&gt;
      &lt;rect id=&quot;zadatak 5&quot; x=&quot;575&quot; y=&quot;162&quot; width=&quot;117&quot; height=&quot;50&quot; fill=&quot;#ECE6AD&quot;&gt;&lt;/rect&gt;
      &lt;rect id=&quot;zadatak 4&quot; x=&quot;337&quot; y=&quot;365&quot; width=&quot;159&quot; height=&quot;50&quot; fill=&quot;#ECE6AD&quot;&gt;&lt;/rect&gt;
      &lt;rect id=&quot;zadatak 3&quot; x=&quot;230&quot; y=&quot;301&quot; width=&quot;107&quot; height=&quot;50&quot; fill=&quot;#ECE6AD&quot;&gt;&lt;/rect&gt;
      &lt;rect id=&quot;zadatak 2&quot; x=&quot;163&quot; y=&quot;232&quot; width=&quot;67&quot; height=&quot;50&quot; fill=&quot;#ECE6AD&quot;&gt;&lt;/rect&gt;
      &lt;rect id=&quot;zadatak 1&quot; x=&quot;48&quot; y=&quot;162&quot; width=&quot;117&quot; height=&quot;50&quot; fill=&quot;#ECE6AD&quot;&gt;&lt;/rect&gt;
      &lt;g id=&quot;Box 2&quot;&gt;
        &lt;mask id=&quot;path-9-inside-1_1_2&quot; fill=&quot;white&quot;&gt;
          &lt;path d=&quot;M573 23H1023V456H573V23Z&quot;&gt;&lt;/path&gt;
        &lt;/mask&gt;
        &lt;path d=&quot;M573 456H571V458H573V456ZM1023 454H573V458H1023V454ZM575 456V23H571V456H575Z&quot; fill=&quot;var(--text-color)&quot; stroke=&quot;var(--text-color)&quot; mask=&quot;url(#path-9-inside-1_1_2)&quot;&gt;&lt;/path&gt;
      &lt;/g&gt;
      &lt;g id=&quot;Box 1&quot;&gt;
        &lt;mask id=&quot;path-11-inside-2_1_2&quot; fill=&quot;white&quot;&gt;
          &lt;path d=&quot;M46 23H496V456H46V23Z&quot;&gt;&lt;/path&gt;
        &lt;/mask&gt;
        &lt;path d=&quot;M46 456H44V458H46V456ZM496 454H46V458H496V454ZM48 456V23H44V456H48Z&quot; fill=&quot;var(--text-color)&quot; stroke=&quot;var(--text-color)&quot; mask=&quot;url(#path-11-inside-2_1_2)&quot;&gt;&lt;/path&gt;
      &lt;/g&gt;
      &lt;text id=&quot;UKUPNO VRIJEME ZA IZVRSAVANJE&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Sans 3&quot; font-size=&quot;24&quot; letter-spacing=&quot;0.04em&quot;&gt;&lt;tspan x=&quot;151&quot; y=&quot;490.488&quot;&gt;UKUPNO VRIJEME&lt;/tspan&gt;&lt;/text&gt;
      &lt;text id=&quot;ZADACI&quot; transform=&quot;translate(0 291) rotate(-90)&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Sans 3&quot; font-size=&quot;32&quot; letter-spacing=&quot;0.04em&quot;&gt;&lt;tspan x=&quot;0&quot; y=&quot;32.984&quot;&gt;ZADACI&lt;/tspan&gt;&lt;/text&gt;
      &lt;text id=&quot;ASINHRONO&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Sans 3&quot; font-size=&quot;32&quot; letter-spacing=&quot;0.04em&quot;&gt;&lt;tspan x=&quot;709&quot; y=&quot;42.984&quot;&gt;ASINHRONO&lt;/tspan&gt;&lt;/text&gt;
      &lt;text id=&quot;SINHRONO&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Sans 3&quot; font-size=&quot;32&quot; letter-spacing=&quot;0.04em&quot;&gt;&lt;tspan x=&quot;192&quot; y=&quot;32.984&quot;&gt;SINHRONO&lt;/tspan&gt;&lt;/text&gt;
    &lt;/g&gt;
  &lt;/g&gt;
&lt;/svg&gt;
  &lt;!-- &lt;figcaption&gt;Prikaz izvrsavanja sinhronih operacija (zeleno) vs asinhronih operacija (crveno).&lt;/figcaption&gt; --&gt;
&lt;/figure&gt;
&lt;p&gt;Ovo je moguce jer okruzenje poput Node.js i pretrazivaca imaju event loop. Event loop zahtjevnije/sporije operacije moze predati pretrazivacu. Kada pretrazivac obradi operaciju, rezultat vraca u glavnu skriptu (npr. u obliku Promise objekta) u red zadataka i ceka da JavaScript engine postane slobodan kako bi izvrsio ostatak koda.&lt;/p&gt;
&lt;!-- Ove su navedene neke asinhrone operacije:

- &lt;span&gt;&lt;strong&gt;Tajmeri&lt;/strong&gt; &lt;code&gt;setTimeout()&lt;/code&gt; i &lt;code&gt;setInterval()&lt;/code&gt; izvrasavaju funkciju nakon odredjenog vremena/intervala&lt;/span&gt;
- &lt;span&gt;&lt;strong&gt;Event Listener&lt;/strong&gt; ce izvrsiti funkciju kada se definisani dogadjaj poput &lt;code&gt;click&lt;/code&gt; ili &lt;code&gt;keydown&lt;/code&gt; desi.&lt;/span&gt;
- &lt;span&gt;&lt;strong&gt;Web radnici&lt;/strong&gt; su karakteristika okruzenja u pretrazivacu koja omogucava developerima da izvrse JavaScript kod u odvojenoj niti od glavne. Petlju kojoj treba vremena da se izvrsi, mozemo izvrsiti u web radniku kako ne zagusili glavnu nit. Glavna nit i web worker mogu komunicirati razmjenjivanjem poruka.&lt;/span&gt;
- &lt;span&gt;&lt;strong&gt;Fetch API&lt;/strong&gt; se koristi za slanje HTTP zahtjeva serveru. Dok ne dobije odgovor od servera za vrijednost ima &lt;code&gt;pending&lt;/code&gt; stanje. U medjuvremenu JS moze nastaviti dalje.&lt;/span&gt;

Dok Web API izvrsava asinhronicnu operaciju u pozadini, program se nastavlja izvrsavati sinhronicno. Onog momenta kada zavrsi, vraca rezultat i ceka da niz u kom se skripta izvrsavala postane slobodan. Ovakvo paralelno izvrsavanje sporih operacija cini JavaScript neblokirajucim jezikom. --&gt;
&lt;h2 id=&quot;v8&quot;&gt;V8&lt;/h2&gt;
&lt;p&gt;V8 engin je odgovoran za brzo izvrsavanje JavaScript koda. Napisan je u C++ sto utice na dobar performas. V8 kompajlira kod u masinski i izvrsava u procesoru racunara. Izmedju ostalog ga koriste Chrome, Opera, Microsoft Ege, Brave (Chromium pretrazivaci) i Node.js.&lt;/p&gt;
&lt;h2 id=&quot;call-stack&quot;&gt;Call stack&lt;/h2&gt;
&lt;p&gt;Pozivni stek (call stack) je &lt;i&gt;Last In First out&lt;/i&gt; (LIFO) struktura podataka koja prati pozive funkcija u programu. Kada se funkcija pozove, dodaje se na vrh pozivnog steka i sklanja tek kada se izvrsi. Ovo omogucava V8 enginu da prati red izvrsavanja programa.&lt;/p&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 2;&quot;&gt;Ako razmislite o tome, ovu strukturu vjerovatno koristite kada jedete palacinke, osim ako je smjelo od mene da pretpostavim da cekate da sve budu gotove prije nego ih pojedete.&lt;/p&gt;
&lt;p&gt;Okej je ako objasnjenje iznad nije dovoljno da potpuno procesuirate call stack i LIFO strukturu podataka, ali kod i praktican primjer govore hiljadu rijeci (i debagovanje isto 😶). Zato je sledece pitanje sta je rezultat koda ispod i kako se on izvrsava?&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;weAreAtTheTop&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;weAreAtTheTop is executed&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;forward&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;weAreAtTheTop&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;forward is executed&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;move&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;forward&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;move is executed&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;move&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;next instruction&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Rezultat u konzoli je:&lt;/p&gt;
&lt;pre class=&quot;basic-pre&quot;&gt;
weAreAtTheTop is executed
forward is executed
move is executed
next instruction
&lt;/pre&gt;
&lt;p&gt;Evo kratke vizualizacije izvrsavanja koda i prikaza u pozivnom steku (&lt;em&gt;Last In First Out&lt;/em&gt; struktura podataka). Prvo se poziva &lt;code&gt;move()&lt;/code&gt; funkcija na liniji 15.&lt;/p&gt;
&lt;figure style=&quot;max-width: 600px&quot;&gt; 
  &lt;img style=&quot;border-radius: 0 15px 0px 45px&quot; src=&quot;https://webdevlpr.com/static/img/call-stack.gif&quot; alt=&quot;Prikaz izvrsavanja pozivnog steka u JavaScriptu&quot; /&gt;
  &lt;figcaption&gt;Kod vizualiziramo uz pomoc alata koji se moze pronaci &lt;a target=&quot;_blank&quot; href=&quot;http://latentflip.com/loupe/?code=ZnVuY3Rpb24gd2VBcmVBdFRoZVRvcCgpIHsNCiAgY29uc29sZS5sb2coJ3dlQXJlQXRUaGVUb3AgaXMgZXhlY3V0ZWQnKTsNCn0NCg0KZnVuY3Rpb24gZm9yd2FyZCgpIHsNCiAgd2VBcmVBdFRoZVRvcCgpOw0KICBjb25zb2xlLmxvZygnZm9yd2FyZCBpcyBleGVjdXRlZCcpOw0KfQ0KDQpsZXQgbW92ZSA9IGZ1bmN0aW9uKCkgew0KICBmb3J3YXJkKCk7DQogIGNvbnNvbGUubG9nKCdtb3ZlIGlzIGV4ZWN1dGVkJyk7DQp9Ow0KDQptb3ZlKCk7DQoNCmNvbnNvbGUubG9nKCduZXh0IGluc3RydWN0aW9uJyk7!!!PGJ1dHRvbj5DbGljayBtZSE8L2J1dHRvbj4%3D&quot;&gt;ovdje&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Ovako to radimo jer single-threaded znaci da imamo jedan call stack na kom se obradjuje jedna naredba istovremeno: sinhrono izvrsavanje.&lt;/p&gt;
&lt;p&gt;Evo primjera kako to moze uticati na korisnicko iskustvo: zamislite da kliknete na dugme koje otvara pop-up prozor, ali V8 engine je vec zauzet izvrsavanjem neke druge CPU gladne naredbe. U tom slucaju, na ekranu se nista nece dogoditi, cak ni ako ponovo kliknete na dugme. Ukoliko postoji animirani GIF na stranici, on je zaustavljen i djeluje kao staticna slika. Kada se V8 engine oslobodi i obradi klikove, pretrazivac ce prikazati niz pop-up prozora i nastaviti s animacijom GIF-a.&lt;/p&gt;
&lt;h2 id=&quot;task-queue-i-web-api&quot;&gt;Task queue i web API&lt;/h2&gt;
&lt;p&gt;Scenario iznad implicira da je pretrazivac bio svjestan klikova i da su oni negdje zabiljezeni iako nisu izvrseni istog trenutka. A to negdje je &lt;u&gt;red zadataka&lt;/u&gt; (task queue) koji ima &lt;i&gt;First In First Out&lt;/i&gt; (FIFO) strukturu podataka, kao onaj u prodavnici na kasi. Da bi ovi zadaci iz task queue dosli na red u pozivni stek, moraju sacekati da se instrukcije iz glavne skripte sinhrono izvrse i da call stack postane slobodan. Tada se mogu izvrsavati task / callback queue zadaci.&lt;/p&gt;
&lt;p&gt;Kako uopste operacija dospije u task queue? Ovdje u sliku dolaze WebAPI-jevi.&lt;/p&gt;
&lt;p&gt;Web API (Application Programming Interface) je skup alata i metoda koje su dostupne u pretrazivacu. Oni prosiruju mogucnosti JavaScript-a. JavaScript u sebi nema ugradjen pristup DOM-u (Document Object Model), niti mogucnost da slusa klik na dugme, salje mrezne zahtjeve ili odlozi dogadjaje uz &lt;code&gt;setTimeout()&lt;/code&gt; metodu.&lt;/p&gt;
&lt;p&gt;Ovo su karakteristike okruzenja u kom se JavaScript izvrsava. Kao takve ih obradjuje pretrazivac paralelno sa call stackom koji se bavi sinhronim operacijama koje JavaScript engine izvrsava sam bez pomoci petlje dogadjaja.&lt;/p&gt;
&lt;video class=&quot;wide-vid&quot; controls=&quot;&quot;&gt;
  &lt;source src=&quot;https://webdevlpr.com/static/img/event-loop.webm&quot; type=&quot;video/webm&quot; /&gt;
  &lt;!-- &lt;source src=&quot;video.mp4&quot; type=&quot;video/mp4&quot;&gt;
  &lt;source src=&quot;video.ogg&quot; type=&quot;video/ogg&quot;&gt; --&gt;
&lt;/video&gt;
&lt;p&gt;Call stack je inicijalno samo registrovao slusanje dogadjaja. Dogadjaj je asinhrona operacija koja nije ugradjena u JavaScript, vec u pretrazivac. Nakon registracije, pretrazivac ce slusati i cekati klik. Kada se klik dogodi, on ide u &amp;quot;red cekanja&amp;quot; koji sada poznajemo kao task queue. Event loop ga iz task queue prebacuje u call stack kada primjeti da je call stack slobodan. Tek tada se klik obradjuje.&lt;/p&gt;
&lt;h2 id=&quot;event-loop&quot;&gt;Event loop&lt;/h2&gt;
&lt;p&gt;Koncept petlje dogadjaja je jednostavan. Postoji beskonacna petlja u kojoj JavaScript izvrsava zadatke od najstarijeg (First in First Out), ceka na nove i do tada spava. JavaScript engine vecinu vremena miruje.&lt;/p&gt;
&lt;p&gt;Medju prvim zadacima je izvrsavanje eskterne skripte &lt;code&gt;&amp;lt;script src=&amp;quot;...&amp;quot;&amp;gt;&lt;/code&gt; koja obicno bude postavljena u html dokument i ona kreira GCE (Global Execution Context), pored toga mozda otprema klik i izvrsava hadnlere (funkcije koje &amp;quot;hendluju&amp;quot; odgovor na dogadjaj).&lt;/p&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 2;&quot;&gt;U JavaScript-u globalni kontekst izvrsavanja je defaultni kontekst izvrsavanja i kreira se kada JavaScript engine pocne pokretati nas kod. Kontekst izvrsavanja funkcije kreira se kad god se pozove funkcija i predstavlja lokalni opseg funkcije.&lt;/p&gt;
&lt;p&gt;Takodje, treba znati da postoji dvije vrste zadataka: mikro i makro.&lt;/p&gt;
&lt;h3 id=&quot;makrozadaci&quot;&gt;Makrozadaci&lt;/h3&gt;
&lt;p&gt;Makrozadaci su zadaci koji zahtijevaju vise vremena za izvrsenje i dodaju se na kraj reda. Primjeri makrozadataka ukljucuju &lt;code&gt;setTimeout&lt;/code&gt;, &lt;code&gt;setInterval&lt;/code&gt;, DOM manipulaciju i mrezne zahtjeve. Kada se makrozadatak doda u red, event loop provjerava postoje li drugi zadaci koji se trenutno izvrsavaju i stavlja makrotask u call stack ako JavaScript engine miruje.&lt;/p&gt;
&lt;h3 id=&quot;mikrozadaci&quot;&gt;Mikrozadaci&lt;/h3&gt;
&lt;p&gt;Mikrozadaci su zadaci koji zahtijevaju manje vremena za izvrsenje i izvrsavaju se odmah nakon sto se zadatak koji se trenutno izvrsava izvrsi. Mikrozadaci dolaze iskljucivo iz naseg koda. Obicno ih kreiraju &lt;code&gt;Promise&lt;/code&gt;, sa &lt;code&gt;.then/catch/finally/await&lt;/code&gt; hendlerima. Postoji i posebna funkcija &lt;code&gt;queueMicrotask(func)&lt;/code&gt; koja dodaje callback funkciju u red za izvrsavanje mikrozadataka.&lt;/p&gt;
&lt;h3 id=&quot;red-izvrsavanja&quot;&gt;Red izvrsavanja&lt;/h3&gt;
&lt;p&gt;Odmah po izvrsavanju jednog makrozadatka, JavaScript engine izvrsava sve mikrozadatke u redu prije nego nastavi izvrsavati preostale makrozadatke. Evo primjera koda koji to ilustruje:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;start&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// makrozadatak&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;setTimeout&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;timeout&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// mikrozadatak&lt;/span&gt;&lt;br /&gt;Promise&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;promise&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// drugi mikrozadatak&lt;/span&gt;&lt;br /&gt;  Promise&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;nested promise&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;end&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// kozola: &lt;/span&gt;&lt;br /&gt;start&lt;br /&gt;end&lt;br /&gt;promise&lt;br /&gt;nested promise&lt;br /&gt;timeout&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Gdje se tu uklapa renderovanje? Izmedju izvrsenja svih mikrozadataka i pokretanja novog makro zadatka.&lt;/p&gt;
&lt;figure&gt;
  &lt;svg width=&quot;227&quot; height=&quot;330&quot; viewBox=&quot;0 0 227 330&quot; fill=&quot;none&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
    &lt;g id=&quot;Frame 2&quot; clip-path=&quot;url(#clip0_12_2)&quot;&gt;
      &lt;g id=&quot;Group 4&quot;&gt;
        &lt;g id=&quot;Group 1&quot;&gt;
          &lt;text id=&quot;makrozadatak&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Sans 3&quot; font-size=&quot;24&quot; letter-spacing=&quot;0.04em&quot;&gt;&lt;tspan x=&quot;62.294&quot; y=&quot;71.7727&quot;&gt;makrozadatak&lt;/tspan&gt;&lt;/text&gt;
        &lt;/g&gt;
        &lt;g id=&quot;Group 2&quot;&gt;
          &lt;text id=&quot;mikrozadaci&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Sans 3&quot; font-size=&quot;24&quot; letter-spacing=&quot;0.04em&quot;&gt;&lt;tspan x=&quot;72.294&quot; y=&quot;179.773&quot;&gt;mikrozadaci&lt;/tspan&gt;&lt;/text&gt;
        &lt;/g&gt;
        &lt;g id=&quot;Group 3&quot;&gt;
          &lt;text id=&quot;renderovanje&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Sans 3&quot; font-size=&quot;24&quot; letter-spacing=&quot;0.04em&quot;&gt;&lt;tspan x=&quot;61.294&quot; y=&quot;281.773&quot;&gt;renderovanje&lt;/tspan&gt;&lt;/text&gt;
        &lt;/g&gt;
        &lt;path id=&quot;Arrow 1&quot; d=&quot;M137.233 139.345C137.819 139.931 138.769 139.931 139.355 139.345L148.901 129.799C149.486 129.214 149.486 128.264 148.901 127.678C148.315 127.092 147.365 127.092 146.779 127.678L138.294 136.163L129.809 127.678C129.223 127.092 128.273 127.092 127.687 127.678C127.102 128.264 127.102 129.214 127.687 129.799L137.233 139.345ZM136.794 98.2847L136.794 138.285L139.794 138.285L139.794 98.2847L136.794 98.2847Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
        &lt;path id=&quot;Arrow 2&quot; d=&quot;M137.233 241.345C137.819 241.931 138.769 241.931 139.355 241.345L148.901 231.799C149.486 231.214 149.486 230.264 148.901 229.678C148.315 229.092 147.365 229.092 146.779 229.678L138.294 238.163L129.809 229.678C129.223 229.092 128.273 229.092 127.687 229.678C127.102 230.264 127.102 231.214 127.687 231.799L137.233 241.345ZM136.794 200.285L136.794 240.285L139.794 240.285L139.794 200.285L136.794 200.285Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
        &lt;path id=&quot;Arrow 3&quot; d=&quot;M144.097 297.546L145.597 297.546L145.597 297.546L144.097 297.546ZM126.097 315.546L126.097 317.046L126.097 317.046L126.097 315.546ZM35.678 315.546L35.678 317.046H35.678L35.678 315.546ZM17.678 297.546L19.178 297.546V297.546L17.678 297.546ZM17.678 150.823L19.178 150.823V150.823L17.678 150.823ZM138.697 30.5989L137.197 30.5989L137.197 30.5989L138.697 30.5989ZM137.636 38.8645C138.222 39.4502 139.172 39.4502 139.758 38.8644L149.303 29.3185C149.889 28.7327 149.889 27.783 149.303 27.1972C148.718 26.6114 147.768 26.6114 147.182 27.1972L138.697 35.6825L130.212 27.1972C129.626 26.6114 128.676 26.6114 128.09 27.1972C127.504 27.783 127.504 28.7327 128.09 29.3185L137.636 38.8645ZM17.678 30.5989L19.178 30.5989L19.178 30.5989L17.678 30.5989ZM35.678 12.5989L35.678 11.0989L35.678 11.0989L35.678 12.5989ZM120.697 12.5989L120.697 14.0989L120.697 14.0989L120.697 12.5989ZM142.597 293.945L142.597 297.546L145.597 297.546L145.597 293.945L142.597 293.945ZM126.097 314.046L35.678 314.046L35.678 317.046L126.097 317.046L126.097 314.046ZM19.178 297.546L19.178 150.823L16.178 150.823L16.178 297.546L19.178 297.546ZM137.197 30.5989L137.197 37.8038L140.197 37.8038L140.197 30.5989L137.197 30.5989ZM19.178 150.823L19.178 30.5989L16.178 30.5989L16.178 150.823L19.178 150.823ZM35.678 14.0989L120.697 14.0989L120.697 11.0989L35.678 11.0989L35.678 14.0989ZM19.178 30.5989C19.178 21.4862 26.5653 14.0989 35.678 14.0989L35.678 11.0989C24.9085 11.0989 16.178 19.8294 16.178 30.5989L19.178 30.5989ZM140.197 30.5989C140.197 19.8294 131.466 11.0989 120.697 11.0989L120.697 14.0989C129.81 14.0989 137.197 21.4862 137.197 30.5989L140.197 30.5989ZM35.678 314.046C26.5653 314.046 19.178 306.659 19.178 297.546L16.178 297.546C16.178 308.316 24.9084 317.046 35.678 317.046L35.678 314.046ZM142.597 297.546C142.597 306.659 135.21 314.046 126.097 314.046L126.097 317.046C136.866 317.046 145.597 308.316 145.597 297.546L142.597 297.546Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
      &lt;/g&gt;
    &lt;/g&gt;
    &lt;defs&gt;
      &lt;clipPath id=&quot;clip0_12_2&quot;&gt;
        &lt;rect width=&quot;227&quot; height=&quot;330&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/rect&gt;
      &lt;/clipPath&gt;
    &lt;/defs&gt;
  &lt;/svg&gt;
&lt;/figure&gt;
&lt;p&gt;Kada je JavaScript engine zauzet renderovanje nece biti izvrseno, bez obzira na to koliko ce zadatak uzeti vremena. Ako zadatak traje predugo, pretrazivac moze prestati reagovati i predloziti da potpuno &amp;quot;ubijete zadatak&amp;quot; zajedno sa stranicom.&lt;/p&gt;
&lt;h3 id=&quot;ukratko&quot;&gt;Ukratko&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Izvrsi najstariji makrozadatak iz reda&lt;/li&gt;
&lt;li&gt;Izvrsi sve mikrozadatke, pocevsi od najstarijeg&lt;/li&gt;
&lt;li&gt;Renderuj promjene ako ih ima&lt;/li&gt;
&lt;li&gt;Ako nema zadataka, cekaj&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;dodatni-izvori&quot;&gt;Dodatni izvori&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;YT: &lt;a target=&quot;_blank&quot; href=&quot;https://www.youtube.com/watch?v=8zKuNo4ay8E&quot;&gt;Asynchronous JavaScript &amp;amp; EVENT LOOP from scratch 🔥&lt;/a&gt; Namaste JavaScript | Akshay Saini&lt;br /&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;YT: &lt;a target=&quot;_blank&quot; href=&quot;https://www.youtube.com/watch?v=8aGhZQkoFbQ&quot;&gt;What the heck is the event loop anyway?&lt;/a&gt; Philip Roberts | JSConf EU&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;YT: &lt;a target=&quot;_blank&quot; href=&quot;https://www.youtube.com/watch?v=cCOL7MC4Pl0&quot;&gt;Web browser event loop, setTimeout, micro tasks, requestAnimationFrame..&lt;/a&gt; od Jake Archibald&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Post: &lt;a target=&quot;_blank&quot; href=&quot;https://javascript.info/event-loop&quot;&gt;Event loop: microtasks and macrotasks&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>ES6 Moduli</title>
    <link href="https://webdevlpr.com/posts/es6-moduli/"/>
    <id>https://webdevlpr.com/posts/es6-moduli/</id>
    <updated>2022-11-28T17:00:00Z</updated>
    <summary>Moduli omogucavaju bolju organizaciju kroz razdjeljivanje koda u vise manjih fajlova sto cini razumijevanje i odrzavanje jednostavnijim.</summary>
    <content type="html">&lt;p&gt;Moduli olaksavaju odrzavanje koda jednostavnijim. Jedan modul je jedna skripta, odnosno fajl. Glavna ideja iza modula je da cuvamo relevantan kod u jednoj skripti, umjesto da sve bude zajedno. Kada je potrebno, te skripte mozemo importovati u druge skripte.&lt;/p&gt;
&lt;h2 id=&quot;osnovna-primjena&quot;&gt;Osnovna primjena&lt;/h2&gt;
&lt;p&gt;U primjeru ispod cemo eksportovati klasu i dvije funkcije iz &lt;code&gt;macka.js&lt;/code&gt; u glavnu skriptu gdje ce se one moci koristiti. Da bi to radilo potrebno je da:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Fajl koji se eksportuje koristi &lt;code&gt;export&lt;/code&gt; &#92; &lt;code&gt;default export&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Fajl koji se importuje &lt;code&gt;import&lt;/code&gt; (uz &lt;code&gt;from&lt;/code&gt; sa apsolutnim ili relativnim putem)&lt;/li&gt;
&lt;li&gt;HTML fajlu bude naznaceno da se radi o skripti koja koristi module sa atributom  &lt;code&gt;type=&#39;module&#39;&lt;/code&gt; (ukoliko ne koristite alat poput webpack-a).&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// macka.js&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// export default ...&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Macka&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;ime&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; vrsta&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; ime&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;vrsta &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; vrsta&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// export ...&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;prikaziIme&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;macka&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;Ja se zovem &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;macka&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ime&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;prikaziVrstu&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;macka&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;macka&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ime&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt; pripada &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;macka&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;vrsta&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt; vrsti.&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// ili&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// export default Macka;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// export {prikaziIme as prikaziImeMacke, prikaziVrstu};&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Odvojeni import/export se moze navesti na vrhu ili dnu skripte&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// main.js:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; Macka&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;prikaziIme&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; prikaziVrstu &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; prikaziVrstuMacke&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;/macka.js&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; macka &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Macka&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Lana&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Munchkin&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;prikaziVrstuMacke&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;macka&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Lana pripada Munchkin vrsti.&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;prikaziIme&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;macka&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Ja se zovem Lana.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- index.html: --&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;module&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;main.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- Da bi pruzili alternativu starijim pretrazivacima: --&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;nomodule&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;fallback.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;scripts&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p class=&quot;tip&quot; style=&quot;--span-row: 2;&quot;&gt;&lt;code&gt;type=&quot;module&quot;&lt;/code&gt; se ponasa kao &lt;code&gt;defer&lt;/code&gt; atribut. 
Skripte sa tim atributom se preuzimaju paralelno sa ostalim izvorima i izvrsavaju nakon sto je HTML dokument rasclanjen. Glavna razlika izmedju &lt;code&gt;defer&lt;/code&gt; i &lt;code&gt;type=&quot;module&quot;&lt;/code&gt; atributa je ta sto drugi atribut oznacava da se skripta tretira kao modul zbog cega su kljucne rijeci poput &lt;code&gt;import&lt;/code&gt; i &lt;code&gt;export&lt;/code&gt; dostupne. Da bi se ove skripte izvrsile odmah, dovoljno je dodati atribut &lt;code&gt;async&lt;/code&gt;. On obicno ne radi inline, osim ako se radi o skripti tipa modul.&lt;/p&gt;
&lt;!-- (export default i export)
Default
- Koristi se za eksportovanje glavne vrijednosti modula
- Ime je nezavisno kada se importuje, odnosno moze biti proizvoljno

Imenovani eksport
- moze eksportovati vise vrijednosti za jedan module
- mora se importovati kroz isto ime (i eventualno dodati pseudonim sa `as` alias)
- koristi viticaste zagrade
--&gt;
&lt;p&gt;Import iz primjera iznad mozemo skratiti kako smo sve sto je naznaceno za eksportovanje importovali u glavni .js fajl. Zato koristimo zvjezdicu &lt;code&gt;*&lt;/code&gt; u sledecem primjeru. Ona sve dodaje u jedan objekat. Mana je sto su nazivi zbunjujuci i nepregledni samo da bi linija importovanja bila kraca.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; macka &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;./macka.js&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; macor &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;macka&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;default&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Artur&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Evropska kratkodlaka macka&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;macka&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;prikaziIme&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;macor&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Ja se zovem Artur.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;macka&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;U konzoli cemo dobiti:&lt;/p&gt;
&lt;pre class=&quot;basic-pre&quot;&gt;
× Module
   default: (...)
   prikaziIme: (...)
   prikaziVrstu: (...)
   Symbol(Symbol.toStringTag): &#39;Module&#39;
   ...
&lt;/pre&gt;
&lt;p class=&quot;tip&quot;&gt;Sa druge strane webpack i slicni alati obicno optimizuju module kako bi ubrzali ucitiavanje tako sto uklone importe koji se ne koriste.&lt;/p&gt;
&lt;h2 id=&quot;podrazumijevani-eksport&quot;&gt;Podrazumijevani eksport&lt;/h2&gt;
&lt;p&gt;Moguce je eksportovati bilo koji dio koda skripte: varijablu, funkciju, niz, klasu itd. Medjutim u fajlu samo jedan moze biti naznacen sa &lt;code&gt;default&lt;/code&gt;. On se importuje bez viticastih zagrada i njen naziv je nezavisan, tj. ne mora biti identican kao u fajlu iz kog se eksportuje.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// macka.js&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Macka&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// main.js&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;M&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;/macka.js&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; macka &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Lana&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Munchkin&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Kako &lt;code&gt;default export&lt;/code&gt; ima nezavisno ime jer mozemo imati samo jedan takav po fajlu — mozemo ga izostaviti i recimo eksportovati kao anonimnu funkciju, niz, vrijednost bez kreiranje varijable itd.&lt;/p&gt;
&lt;p&gt;Prema tome mozemo razlikovati dva eksporta:&lt;br /&gt;
&lt;i&gt;defaultni eksport&lt;/i&gt;: &lt;code&gt;export default {ime: &#39;Lana&#39;}&lt;/code&gt; i&lt;br /&gt;
&lt;i&gt;imenovani eksport&lt;/i&gt;: &lt;code&gt;export class Macka {}&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Priznajem da se &lt;code&gt;default export&lt;/code&gt; ipak moze napisati sa viticastim zagradama, ali postoji mali trik — potrebno je naznaciti &lt;code&gt;as default&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// export.js&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Macka&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;Macka &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// import.js&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; Macka&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;dalje-izvozenje&quot;&gt;Dalje izvozenje&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;export {} from ...&lt;/code&gt; je sintaksa koja vise podsjeca na import kakav smo koristili iznad. Kada zelimo sa jednog fajla imati dostupne sve funkcionalnosti drugih modula za dalji izvoz koristimo zvjezdicu ili viticaste zagrade kao u primjeru ispod.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; prikaziIme&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; prikaziVrstu&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;./macka.js&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dalje izvozenje sa zvjezdicom &lt;code&gt;*&lt;/code&gt; ne ukljucuje &lt;code&gt;default&lt;/code&gt; eksport i njega je potrebno navesti u zasebnoj liniji sa &lt;code&gt;export {default} from &amp;quot;./fajl.js&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Ovakvo dalje izvozenje uskracuje trenutni fajl za pristup navedenim funkcijama, ono ih samo usmjerava dalje. Da bi modul koristili u fajlu koji ih dalje izvozi, potrebno je prvo importovati i potom eksportovati.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; Macka&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;prikaziIme&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; prikaziVrstu&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;./macka.js&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;Macka &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; prikaziIme&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; prikaziVrstu&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dalje izozenje se obicno koristi kada objavljujemo paket na npm-u (Node Package Manager). U licnom projektu ovo izaziva problem sa funkcijama poput &amp;quot;Go to defenition&amp;quot;, &amp;quot;Go to implementation&amp;quot;, &amp;quot;Go to reference&amp;quot; u VS Code editoru (bar u mom slucaju).&lt;/p&gt;
&lt;h2 id=&quot;dinamicno-importovanje&quot;&gt;Dinamicno importovanje&lt;/h2&gt;
&lt;p&gt;Sa sintaksom o kojoj smo diskutovali do sada nije moguce importovati u nekom bloku koda, samo na najvisem nivou opsega. Da bi stavili import u okviru nekog bloka kao sto je uslovni, pomoci ce nam jos jedna opcija koju nismo pominjali: &lt;code&gt;import(&#39;./fajl.js&#39;)&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; nazivFajla &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;macka.js&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;nazivFajla&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// dodjeljivanje vrijednosti destrukturisanjem&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Macka&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; prikaziIme&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;./&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;nazivFajla&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; macor &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Macka&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Artur&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Evropskoj&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;prikaziIme&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;macor&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Ja se zovem Artur.&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;import(&#39;./fajl.js&#39;)&lt;/code&gt; vraca &lt;u&gt;promise&lt;/u&gt;, iz tog razloga ispred stoji kljucna rijec &lt;code&gt;await&lt;/code&gt;. Iako je ona uglavnom dopustena unutar &lt;code&gt;async&lt;/code&gt; funkcije, u modulima radi i na najvisem nivou opsega izvan nje.&lt;/p&gt;
&lt;p class=&quot;tip tip-right&quot;&gt;Dinamicno importovanje radi i u obicnim skriptama te nije potrebno dodavati &lt;code&gt;type=&quot;module&quot;&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;neke-karakteristike-modula&quot;&gt;Neke karakteristike modula&lt;/h2&gt;
&lt;p&gt;&lt;u&gt;Moduli su uvijek u &lt;code&gt;&#39;use strict&#39;&lt;/code&gt; rezimu.&lt;/u&gt; To znaci da bi akcija poput dodjeljivanja vrijednosti nedeklarisanoj varijabli dala gresku. Takodje, u tom rezimu &lt;code&gt;this&lt;/code&gt; na opsegu najviseg nivoa ima vrijednost &lt;code&gt;undefined&lt;/code&gt; umjesto &lt;code&gt;window&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;module&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;span class=&quot;token language-javascript&quot;&gt;&lt;br /&gt;  ime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Vanja&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Uncaught ReferenceError: ime is not defined&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// undefined&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;opseg-na-nivou-modula&quot;&gt;Opseg na nivou modula&lt;/h3&gt;
&lt;p&gt;Opseg radi na nivou modula, odnosno svaki modul za sebe ima nezavisne varijable i funkcije najviseg nivoa koje nisu vidljive u opsegu drugog modula.&lt;br /&gt;
Recimo da imamo dvije skripte i u drugoj zelimo pozvati funkciju iz prve:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// funkcija.js:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;pozdravi&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;ime&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;Dobrodosao, &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;ime&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// pozivanjeFunkcije.js:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;pozdravi&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Marko&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;index.html:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;funkcija.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;pozivanjeFunkcije.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Rezultat koda je ispis &lt;code&gt;Dobrodosao, Marko!&lt;/code&gt; u konzoli, ali sa modulima to ne bi bio slucaj. Ako &lt;code&gt;script&lt;/code&gt; tagu gdje se nalazi funkcija dodamo &lt;code&gt;type=&#39;module&#39;&lt;/code&gt; atribut, rezultat je greska: &lt;code&gt;pozdravi is not defined&lt;/code&gt;. Druga skripta ne vidi funkciju jer je &amp;quot;zarobljena&amp;quot; unutar opsega svog modula.&lt;/p&gt;
&lt;p&gt;Umjesto toga, module mozemo ukljuciti sa par izmjena.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// funkcija.js:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;pozdravi&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;ime&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;Dobrodosao, &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;ime&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;pozdravi&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// pozivanjeFunkcije.js:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;pozdravi&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;./funkcija.js&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;pozdravi&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Marko&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I u index.html fajlu ostavimo samo &lt;code&gt;pozivanjeFunkcije.js&lt;/code&gt; koja ce samostalno importovati funkciju od koje ovisi:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;module&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;pozivanjeFunkcije.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  
  <entry>
    <title>Klase</title>
    <link href="https://webdevlpr.com/posts/klase/"/>
    <id>https://webdevlpr.com/posts/klase/</id>
    <updated>2022-11-17T17:00:00Z</updated>
    <summary>U objektno-orijentisanom programiranju, klasa je prosiriv sablon programskog koda za kreiranje objekata. Uz kreiranje objekta, ona obezbjedjuje pocetne vrijednosti za stanja (clanske varijable) i implementacije ponasanja (clanske funkcije ili metoda).</summary>
    <content type="html">&lt;blockquote&gt;
 &lt;p&gt;U objektno-orijentisanom programiranju, klasa je prosiriv sablon programskog koda za kreiranje objekata. Uz kreiranje objekta, ona obezbjedjuje pocetne vrijednosti za stanja (clanske varijable) i implementacije ponasanja (clanske funkcije ili metode).
 &lt;span class=&quot;by&quot;&gt;Wikipedia&lt;/span&gt;
 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;*JavaScript nema klase onako kako ih imaju neki drugi jezici. JavaScript ih imitira na osnovu &lt;a target=&quot;_blank&quot; href=&quot;https://webdevlpr.com/posts/prototipno-nasljedjivanje/&quot;&gt;prototipnog nasljedjivanja&lt;/a&gt;. Zato ohrabrujem razumijevanje prototipa i prototipnog nasljedjivanja prvo jer jer je klasa implementirana na ovom mehanizmu.&lt;/p&gt;
&lt;p&gt;Klase su dodane sa uvodjenjem ECMAScript 6 (es6) kako bi, izmedju ostalog, JavaScript podrzavala objektno orjentisani stil programiranja i kako bi se izaslo u susret programerima sa pozadinom objektno orjentisanih jezika koji se baziraju na klasnom nasljedjivanju (poput: Java, C++, C#..).&lt;/p&gt;
&lt;p&gt;Mozemo reci da je JavaScript skriptni programski jezik visestruke paradigme i podrzava &lt;em&gt;objektno-orijentisani&lt;/em&gt;, &lt;em&gt;imperativni&lt;/em&gt; i &lt;em&gt;funkcionalni&lt;/em&gt; nacin programiranja. Paradigma se moze definisati kao pristup rjesavanju problema, a programska paradigma je nacin rjesavanja problema koristenjem programskog jezika.&lt;/p&gt;
&lt;p&gt;Neki istaknuti clanovi JavaScript zajednice smatraju da je funkcionalni nacin programiranja ispravan i prirodan JavaScript-u, a da OOP i klasa kao &amp;quot;sintaticki secer&amp;quot; moze izazvati glavobolje. Jedan od argumenata je da funkcionalno programiranje osigurava jednostavniju kontrolu toka u kodu, lakse razumijevanje koda i izbjegava iznenadjenja u obliku promjena varijabli, stanja i pojavljivanja gresaka.&lt;/p&gt;
&lt;p&gt;Diskusije o tome da li se klase trebaju koristiti u JavaScript-u se neprekidno vode. Medjutim, to nije razlog da slijepo prihvatimo slicne stavove i odbacimo klase bez razumijevanja. Ovaj odjeljak ne sluzi da osudi upotrebu klase, vec da ohrabri istrazivanje i poznavanje klase kako bi donosili svoje zakljucke.&lt;/p&gt;
&lt;h2 id=&quot;osnovno&quot;&gt;Osnovno&lt;/h2&gt;
&lt;p&gt;Klasa je &lt;u&gt;funkcija&lt;/u&gt; i sintaksa podsjeca na konstruktore jer se poziva sa kljucnom rijeci &lt;code&gt;new&lt;/code&gt; i naziv klase pocinje sa velikim slovom, ali se razlikuje po tome sto&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;klasu deklarisemo sa kljucnom rijeci &lt;code&gt;class&lt;/code&gt; i&lt;/li&gt;
&lt;li&gt;ne navodimo zagrade za parametre kao sto to obicno radimo sa funkcijama.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Zato je u klasi dostupna &lt;code&gt;constructor(x, y) {...}&lt;/code&gt; metoda u koju mozemo smjestiti parametre. Automatski se izvrsava nakon pozivanja klase &lt;code&gt;new Klasa(1, 2)&lt;/code&gt; da bi &lt;u&gt;inicijalizovala novi objekat&lt;/u&gt;. Ukoliko konstruktor metoda nije navedena, JavaScript ce dodati nama nevidljivu i praznu konstruktor metodu.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// let Klasa = class {} ili&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// let Klasa = class ImenovanaKlasaIzraz {} ili&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Klasa&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; id&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// obj.id&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;metoda&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// obj.metoda&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;ispisiID&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fraza &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// direktne metode =&gt; Klasa.prototype&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  fraza &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Moj id je: &#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// direktna svojstva =&gt; obj.fraza&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// u konstruktor funkciji bi definisali svojstvo&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// this.fraza = ...&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// Sa direktnim clanovima klase to ne radimo,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// samo sa clanovima unutar metoda&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; obj &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Klasa&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;123&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;obj&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ispisiID&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Moj id je: 123&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;obj&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// {fraza: &#39;Moj id je: &#39;, id: 123, metoda: ƒ}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Klasa ima jednu specijalnu &lt;code&gt;constructor&lt;/code&gt; metodu, ostale metode se automatizovano dodaju u &lt;code&gt;Klasa.prototype&lt;/code&gt;. &lt;code&gt;.prototype&lt;/code&gt; klase nasljedjuju inicijalizovani objekti kao svoj &lt;code&gt;[[Prototype]]&lt;/code&gt;. Sa druge strane, svaka instanca klase dobija svojstva direktno u objektu, ne kroz prototip.&lt;/p&gt;
&lt;p&gt;Hajde da vidimo &lt;code&gt;obj&lt;/code&gt; u DevTools konzoli (obratite paznju na to gdje se nalazi &lt;code&gt;fraza&lt;/code&gt;, a gdje &lt;code&gt;ispisiID&lt;/code&gt; metoda):&lt;/p&gt;
&lt;pre class=&quot;basic-pre&quot;&gt;
× Klasa
     fraza: &#39;Moj id je &#39;
     id: 123
     metoda: ƒ metoda()
   × [[Prototype]]: Object
       &gt; constructor: class Klasa
       &gt; ispisiID: ƒ ispisiID()
       &gt; [[Prototype]]: Object
&lt;/pre&gt;
&lt;p&gt;Kao sto smo u clanku o &lt;a target=&quot;_blank&quot; href=&quot;https://webdevlpr.com/posts/prototipno-nasljedjivanje/&quot;&gt;prototipima&lt;/a&gt; naveli, svaka funkcija u svom prototip svojstvu ima &lt;code&gt;constructor&lt;/code&gt; svojstvo koje pokazuje na samu funkciju.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;typeof&lt;/span&gt; Klasa&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// function&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;obj&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__ &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Klasa&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// true&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;obj&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;constructor &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; Klasa&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// true&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; obj1 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;obj&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;321&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;obj1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// {fraza: &#39;Moj id je: &#39;, id: 321}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Isto mozemo uraditi bez klase, koristeci konstruktor i prototipe.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Konstruktor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;param&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; param&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fraza &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Moj id je: &#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token class-name&quot;&gt;Konstruktor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;ispisiID&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fraza &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39; &#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; obj &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Konstruktor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;123&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// obj = {fraza: &#39;Moj id je: &#39;, id: 123}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;obj&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ispisiID&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Moj id je: 123&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;petlje-ne-vide-metode&quot;&gt;Petlje ne vide metode&lt;/h3&gt;
&lt;p&gt;Petlje ne vide metode u prototipu klase jer ova svojstva za &lt;code&gt;enumerable&lt;/code&gt; deskriptor dobijaju &lt;code&gt;false&lt;/code&gt; vrijednost, dok to sa konstruktorom u drugom primjeru nije slucaj.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// class Klasa {...}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; deskriptori &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getOwnPropertyDescriptors&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Klasa&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;deskriptori&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Daje:&lt;/p&gt;
&lt;pre class=&quot;basic-pre&quot;&gt;
{
  constructor: {
    writable: true,
    enumerable: false,
    configurable: true,
    value: class Klasa
  },
  ispisiSvojstvo: {
    writable: true,
    enumerable: false,
    configurable: true,
    value: ƒ ispisiSvojstvo()
  }
}
&lt;/pre&gt;
&lt;p&gt;Mozemo napisati petlju koja ispisuje svojstva objekta kreiranog konstruktor funkcijom, ne klasom. Njegova metoda &lt;code&gt;ispisiID()&lt;/code&gt; u prototipu ima vrijednost &lt;code&gt;enumerable: true&lt;/code&gt; i zato je je petlja vidi.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; svojstvo &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; obj&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;svojstvo&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// id, fraza, ispisiID&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;use strict&lt;/code&gt; se podrazumijeva unutar klase. Svi dijelovi tijela klase su u striktnom rezimu. Bez striktnog rezima, ovo bi radilo:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Klasa&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    varijabla &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;  &lt;span class=&quot;token comment&quot;&gt;// varijabla is not defined&lt;/span&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;varijabla&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; obj &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Klasa&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;izgradnja-strukture-sa-geterima-i-seterima&quot;&gt;Izgradnja strukture sa geterima i seterima&lt;/h2&gt;
&lt;p&gt;Pustanje korisnika klase da radi sa svojstvima direktno se potencijalno smatra losim dizajnom. Mozemo zastititi i zamaskirati stvarna svojstva setterima i getterima koji ce imati pristup pravim svojstvima objekta. Zasticena svojstva obicno imaju &lt;code&gt;_&lt;/code&gt; prefix.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Konstruktor&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;fraza&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fraza &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; fraza&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// poziva set fraza(&#39;Dobar dan.&#39;)&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;fraza&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;vrijednost&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;_fraza &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; vrijednost&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// dodjeljuje _fraza: &#39;Dobar dan.&#39;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;get&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;fraza&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;_fraza&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; obj &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Konstruktor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Dobar dan.&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;obj&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// {_fraza: &#39;Dobar dan.&#39;}&lt;/span&gt;&lt;br /&gt;obj&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fraza &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Dobro vece.&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// poziva set fraza(&#39;Dobro vece.&#39;)&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;obj&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fraza&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// poziva get fraza() { return this._fraza }&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Dobro vece&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pozivanjem &lt;code&gt;obj.fraza&lt;/code&gt; svojstva, pozivaju se setter ili getter ako su definisani (u ovisnosti sta zelimo uraditi).&lt;/p&gt;
&lt;p&gt;Potencijal ovog koda je vise od definisanja neke vrijednosti ili vracanja iste. &lt;u&gt;Metode se ponasaju kao svojstva&lt;/u&gt; sto nam daje moc da kontrolisemo podatke: svojstvima dodamo logiku, provjere prije nego svojstvo prihvati vrijednost ili instrukcije za vracanje vrijednosti u specificnom obliku.&lt;/p&gt;
&lt;p&gt;Razlog za prefix &amp;quot;&lt;code&gt;_&lt;/code&gt;&amp;quot; je razlikovanje izmedju setera / getera i originalnog svojstva. Po konvenciji, izvan klase ne treba manipulisati sa svojstvima sa prefixom &amp;quot;&lt;code&gt;_&lt;/code&gt;&amp;quot; iako je moguce. Drugi razlog je da ako JavaScript engine ne moze razlikovati setter/getter metodu od svojstva dolazi do &lt;code&gt;RangeError: Maximum call stack size exceeded&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Kako? Hajde da originalno svojstvo preimenujemo u ime settera.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;fraza&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fraza &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; fraza&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// this.fraza poziva set fraza(&#39;Dobar dan.&#39;)&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;fraza&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;vrijednost&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fraza &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; vrijednost&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// this.fraza beskonacno poziva set fraza(&#39;Dobar dan.&#39;)&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sa getterima mozemo dobiti &lt;code&gt;Maximum call stack size exceeded&lt;/code&gt; na isti nacin.&lt;/p&gt;
&lt;p class=&quot;tip&quot;&gt;Da bi se svojstvo moglo samo citati, ali ne i mijenjati dovoljno je definisati getter bez settera. &lt;/p&gt;
&lt;p&gt;Ispod setter dobija instrukcije da provjeri broj rijeci u proslijedjenoj frazi. Ukoliko postoji vise od jedne rijeci vrijednost je prihvacena, inace porukom sugerise korisniku da pokusa frazu sa vise rijeci.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Konstruktor&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;fraza&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fraza &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; fraza&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;fraza&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;vrijednost&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; nizRijeci &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; vrijednost&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39; &#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;nizRijeci&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;      &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;_fraza &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; vrijednost&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;      console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;Nova fraza je &quot;&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;_fraza&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;      console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;Pokusajte frazu sa najmanje dvije rijeci.&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;get&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;fraza&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;_fraza&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; obj &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Konstruktor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;x&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Pokusajte frazu sa najmanje dvije rijeci&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;obj&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// {}&lt;/span&gt;&lt;br /&gt;obj&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fraza &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Dobro vece.&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Nova fraza je &quot;Dobro vece.&quot;&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;obj&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// { _fraza: &#39;Dobro vece.&#39; };&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;prosirivanje-klase-i-nasljedjivanje&quot;&gt;Prosirivanje klase i nasljedjivanje&lt;/h2&gt;
&lt;p&gt;Da bi prosirili klasu, odnosno da bi jedna naslijedila od druge koristimo kljucnu rijec &lt;code&gt;extends&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Macka&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  kaze &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;meow&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;fraza&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ime&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt; kaze &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;kaze&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;ime&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; vrsta&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; zvuk&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; ime&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;vrsta &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; vrsta&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;zvuk&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;kaze &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; zvuk&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// definisanje nove klase sa extends&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Munchkin&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Macka&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;    &lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;prica&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;fraza&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; oddie &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Munchkin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Oddie&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Munchkin&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;oddie&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;prica&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Oddie kaze meow!&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;oddie&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// {kaze: &#39;meow&#39;, ime: &#39;Oddie&#39;, vrsta: &#39;Munchkin&#39;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Kljucna rijec &lt;code&gt;extends&lt;/code&gt; je &amp;quot;ukrala&amp;quot; mehanizam prototipnog nasljedjivanja.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Metode u klasi nastanjuju &lt;code&gt;.prototype&lt;/code&gt; klase.&lt;/li&gt;
&lt;li&gt;Djecija klasa koja je prosirila (&lt;code&gt;extended&lt;/code&gt;) roditeljsku klasu dobija &lt;code&gt;DjecijaKlasa.prototype.[[Prototype]] = RoditeljskaKlasa.prototype&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Instanca djecije klase dobija &lt;code&gt;objekat.[[Prototype]] = DjecijaKlasa.prototype&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Sva polja postaju direktna svojstva objekta&lt;/li&gt;
&lt;li&gt;Ako zvuci zbunjujuce:&lt;/li&gt;
&lt;/ol&gt;
&lt;figure&gt;
  &lt;style&gt;
    @import url(&#39;https://fonts.googleapis.com/css2?family=Source+Code+Pro:wght@200;400&amp;display=swap&#39;);
  &lt;/style&gt;
&lt;svg style=&quot;width: 100%&quot; viewBox=&quot;10 0 785 924&quot; fill=&quot;none&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
  &lt;g clip-path=&quot;url(#clip0_23_228)&quot;&gt;
    &lt;rect x=&quot;16&quot; y=&quot;45&quot; width=&quot;162&quot; height=&quot;38&quot; stroke=&quot;var(--text-color)&quot; stroke-width=&quot;2&quot;&gt;&lt;/rect&gt;
    &lt;text fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.2em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;67.0195&quot; y=&quot;71.11&quot;&gt;Macka&lt;/tspan&gt;&lt;/text&gt;
    &lt;text fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.2em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;215&quot; y=&quot;55.61&quot;&gt;.prototype&lt;/tspan&gt;&lt;/text&gt;
    &lt;text transform=&quot;translate(510 255)&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.2em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;-8&quot; y=&quot;19.61&quot;&gt;[[Prototype]]&lt;/tspan&gt;&lt;/text&gt;
    &lt;text transform=&quot;translate(438 83)&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.2em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;0&quot; y=&quot;19.61&quot;&gt;[[Prototype]]: &amp;#13;Object&lt;/tspan&gt;&lt;/text&gt;
    &lt;text transform=&quot;translate(646 346)&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.2em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;0&quot; y=&quot;19.61&quot;&gt;__proto__&lt;/tspan&gt;&lt;/text&gt;
    &lt;text fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.2em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;441&quot; y=&quot;42.61&quot;&gt;constructor:&amp;#13;Macka&lt;/tspan&gt;&lt;/text&gt;
    &lt;text fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.2em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;441&quot; y=&quot;72.61&quot;&gt;fraza: &amp;#x192; fraza()&lt;/tspan&gt;&lt;/text&gt;
    &lt;path d=&quot;M359 69L349 63.2265L349 74.7735L359 69ZM210 70L350 70L350 68L210 68L210 70Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
    &lt;path d=&quot;M542 228L547.774 218L536.226 218L542 228ZM543 219L543 162L541 162L541 219L543 219Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
  &lt;path d=&quot;M634 162L628.226 172L639.774 172L634 162ZM635 228L635 171L633 171L633 228L635 228Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
  &lt;path d=&quot;M542 371L547.774 361L536.226 361L542 371ZM543 362L543 308L541 308L541 362L543 362Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
  &lt;path d=&quot;M634 310L628.226 320L639.774 320L634 310ZM635 373L635 319L633 319L633 373L635 373Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
  &lt;text fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;128&quot; font-weight=&quot;200&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;371&quot; y=&quot;106.004&quot;&gt;{&lt;/tspan&gt;&lt;/text&gt;
  &lt;text fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;128&quot; font-weight=&quot;200&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;729&quot; y=&quot;106.004&quot;&gt;}&lt;/tspan&gt;&lt;/text&gt;
&lt;rect x=&quot;16&quot; y=&quot;436&quot; width=&quot;162&quot; height=&quot;38&quot; stroke=&quot;var(--text-color)&quot; stroke-width=&quot;2&quot;&gt;&lt;/rect&gt;
&lt;text fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.2em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;49.0312&quot; y=&quot;462.11&quot;&gt;Munchkin&lt;/tspan&gt;&lt;/text&gt;
&lt;text fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.2em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;215&quot; y=&quot;446.61&quot;&gt;.prototype&lt;/tspan&gt;&lt;/text&gt;
&lt;text transform=&quot;translate(364 553)&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.2em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;-10&quot; y=&quot;19.61&quot;&gt;new Munchkin()&lt;/tspan&gt;&lt;/text&gt;
&lt;text transform=&quot;translate(510 646)&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.2em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;-7&quot; y=&quot;19.61&quot;&gt;[[Prototype]]&lt;/tspan&gt;&lt;/text&gt;
&lt;text transform=&quot;translate(438 474)&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.2em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;0&quot; y=&quot;19.61&quot;&gt;[[Prototype]]: &amp;#13;Macka&lt;/tspan&gt;&lt;/text&gt;
&lt;text transform=&quot;translate(466 869)&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.2em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;0&quot; y=&quot;19.61&quot;&gt;kaze: &amp;#13;&amp;#x2019;meow&amp;#x2019;&lt;/tspan&gt;&lt;/text&gt;
&lt;text fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.2em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;441&quot; y=&quot;433.61&quot;&gt;prica:&amp;#13;&amp;#x192; prica()&lt;/tspan&gt;&lt;/text&gt;
&lt;text fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.2em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;441&quot; y=&quot;463.61&quot;&gt;constructor&amp;#13;: Munchkin&lt;/tspan&gt;&lt;/text&gt;
&lt;text transform=&quot;translate(646 737)&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.2em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;0&quot; y=&quot;19.61&quot;&gt;__proto__&lt;/tspan&gt;&lt;/text&gt;
&lt;text fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.2em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;466&quot; y=&quot;828.61&quot;&gt;vrsta:&amp;#13;&amp;#x2019;Munchkin&amp;#x2019;&lt;/tspan&gt;&lt;/text&gt;
&lt;text fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.2em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;466&quot; y=&quot;858.61&quot;&gt;ime&amp;#13;: &amp;#x2018;Odie&amp;#x2019;&lt;/tspan&gt;&lt;/text&gt;
&lt;path d=&quot;M359 460L349 454.226L349 465.773L359 460ZM210 461L350 461L350 459L210 459L210 461Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M542 619L547.774 609L536.226 609L542 619ZM543 610L543 553L541 553L541 610L543 610Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M634 553L628.226 563L639.774 563L634 553ZM635 619L635 562L633 562L633 619L635 619Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M542 762L547.774 752L536.226 752L542 762ZM543 753L543 699L541 699L541 753L543 753Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M634 701L628.226 711L639.774 711L634 701ZM635 764L635 710L633 710L633 764L635 764Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
&lt;text fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;128&quot; font-weight=&quot;200&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;371&quot; y=&quot;497.004&quot;&gt;{&lt;/tspan&gt;&lt;/text&gt;
&lt;text fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;128&quot; font-weight=&quot;200&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;729&quot; y=&quot;497.004&quot;&gt;}&lt;/tspan&gt;&lt;/text&gt;
&lt;rect x=&quot;444&quot; y=&quot;792&quot; width=&quot;300&quot; height=&quot;119&quot; stroke=&quot;var(--text-color)&quot; stroke-width=&quot;2&quot;&gt;&lt;/rect&gt;
&lt;text fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.2em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;448.02&quot; y=&quot;777.11&quot;&gt;oddie&lt;/tspan&gt;&lt;/text&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/figure&gt;
&lt;p&gt;Ili ispis &lt;code&gt;conosle.log(oddie)&lt;/code&gt; u konzoli. Vidimo desnu stranu &lt;code&gt;[[Prototype]]&lt;/code&gt; nasljedjivanja jer pocinje od objekta &lt;code&gt;oddie&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;basic-pre&quot;&gt;
× Munchkin
      vrsta: &#39;Munchkin&#39;
      ime: &#39;Oddie&#39;
      kaze: &#39;meow&#39;
    × [[Prototype]]: Macka
       &gt; constructor: class Munchkin
       &gt; prica: ƒ prica()
       × [[Prototype]]: Object
          &gt; constructor: class Macka
          &gt; fraza: ƒ fraza()
          × [[Prototype]]: Object
             &gt; constructor: ƒ Object
             &gt; hasOwnProperty: ƒ hasOwnProperty()
             &gt; isPrototypeOf: ƒ isPrototypeOf()
               ...
&lt;/pre&gt;
&lt;p&gt;Kao u prototipima, JavaScript trazi metode uz lanac prototipnog nasljedjivanja.&lt;/p&gt;
&lt;h3 id=&quot;staticna-polja-i-metode&quot;&gt;Staticna polja i metode&lt;/h3&gt;
&lt;p&gt;Sa kljucnom rijeci &lt;code&gt;static&lt;/code&gt; mozemo dodati korisne funkcije klasi. Sigurno ste vidjali neke predefinisane staticne metode poput &lt;code&gt;Math.max()&lt;/code&gt; ili &lt;code&gt;Object.getPrototypeOf()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Staticna polja i metode se dodjeljuju direktno klasi i dostupna su na njoj: &lt;code&gt;Klasa.metoda = fn()&lt;/code&gt;, sto se znacajno razlikuje od &lt;code&gt;Klasa.prototype.metoda = fn()&lt;/code&gt; cime smo se bavili do sada. Koriste se za kreiranje nekog &amp;quot;alata&amp;quot; koji nije specifican za izvedeni objekat i nisu dostupne u pojedinacim inicijalizovanim objektima kako ih ne nasljedjuju u prototipu.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Student&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;ime&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; smijer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; ime&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;smijer &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; smijer&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;studiraEkonomiju&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;student&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;student&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;smijer &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Ekonomija&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; ena &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Student&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Ena&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Ekonomija&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;Student&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;studiraEkonomiju&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ena&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// true&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Prosirenjem klase, djecija klasa nasljedjuje roditeljsku za svoj prototip. Tako djecija klasa nasljedjuje roditeljske staticne metode.&lt;br /&gt;
&lt;code&gt;Alumni.[[Prototype]] = Student&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;Class Student &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;ime&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; smijer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; ime&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;smijer &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; smijer&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;studiraEkonomiju&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;student&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;student&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;smijer &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Ekonomija&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Alumni&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Student&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; ena &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Student&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Ena&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Ekonomija&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;Alumni&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;studiraEkonomiju&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ena&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// true&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;super&quot;&gt;Super&lt;/h3&gt;
&lt;p&gt;Kljucna rijec &lt;code&gt;super&lt;/code&gt; je &lt;u&gt;referenca na roditeljski objekat ili klasu&lt;/u&gt; (super klasu) i sluzi za pristup njihovim metodama i poljima kroz &lt;code&gt;[[Prototype]]&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;metoda&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// poziva roditeljsku istoimenu metodu &lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;svojstvo&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// poziva roditeljsko istoimenu svojstvo&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;args&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// poziva konstruktora roditeljske klase&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ono u cemu je &lt;code&gt;super&lt;/code&gt; dobar je ponovna upotreba vec napisanog koda, sa opcijom da ga prosiri tamo gdje ima potrebe kao sto to rade klase. Evo i kako:&lt;/p&gt;
&lt;h4 id=&quot;konstruktor&quot;&gt;Konstruktor&lt;/h4&gt;
&lt;p&gt;Kada zelimo iz konstruktora djecije klase pozvati roditeljsku pozivamo &lt;code&gt;super(...args)&lt;/code&gt; u obliku funkcije.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Osoba&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;ime&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; godine&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; ime&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;godine &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; godine&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Student&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Osoba&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// Kada djecija klasa nema definisan konstruktor onda se generise:&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// constructor(...args) {&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;//  super(...args);&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;//}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; student &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Student&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Tea&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;23&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// student = { ime: &#39;Tea&#39;, godine: 23};&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;U primjeru iznad djecija klasa automatski poziva roditeljski konstruktor i inicijalizuje objekat &lt;code&gt;student&lt;/code&gt;. A ako zelimo definisati dodatne funkcionalnosti u konstruktoru djecije klase, onda konstruktora roditeljske klase moramo sami pozvati:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Osoba&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;ime&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; godine&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; ime&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;godine &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; godine&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Student&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Osoba&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;ime&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; godine&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; smijer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ime&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; godine&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;smijer &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; smijer&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; student &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Student&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Tea&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;23&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;IT&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// student = { ime: &#39;Tea&#39;, godine: 23, smijer: &#39;IT&#39; };&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Trik je u tome da u konstruktoru djecije klase prije koristenja kljucne rijeci &lt;code&gt;this&lt;/code&gt; moramo pozvati roditeljski konstruktor, inace dolazi do greske:&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: red&quot;&gt;&lt;code&gt;ReferenceError: Must call super constructor in derived class before accessing &#39;this&#39; or returning from derived constructor&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Radi se o tome da kljucna rijec &lt;code&gt;new&lt;/code&gt; inicijalizuje objekat ali to ne moze uraditi izvedena klasa, samo ona koja nema roditelja (&lt;code&gt;protoParent: null&lt;/code&gt;). Izvedene klase imaju interno svojstvo &lt;code&gt;[[ConstructorKind]]: &amp;quot;derived&amp;quot;&lt;/code&gt;. Tek kada super konstruktor inicijalizuje objekat, &lt;code&gt;this&lt;/code&gt; pokazuje na objekat. Prije toga &lt;code&gt;this&lt;/code&gt; nece raditi.&lt;/p&gt;
&lt;h4 id=&quot;metode&quot;&gt;Metode&lt;/h4&gt;
&lt;p&gt;Kada djecija klasa ima trazenu metodu, onda JavaScript engine ne trazi dalje. Medjutim, ako zelimo dodati funkcionalnosti i prilagoditi metodu koja vec postoji u roditeljskoj klasi, ne moramo prepisivati vec napisan kod. U djecijoj klasi cemo kreirati istoimenu metodu i unutra pozvati &lt;code&gt;super.metoda()&lt;/code&gt;. Prije ili nakon poziva super metode mozemo dodati jos funkcionalnosti.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Osoba&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  ime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Tea&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  godine &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;23&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;ispisInfo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;Ime: &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ime&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;. Godina: &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;godine&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Student&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Osoba&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  smijer &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;informatika&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;ispisInfo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ispisInfo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt; Smijer: &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;smijer&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; student &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Student&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;student&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ispisInfo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Ime: Tea. Godina: 23. Smijer: informatika.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;polja-klase&quot;&gt;Polja klase&lt;/h4&gt;
&lt;p&gt;Polja klase su svojstva instance, ali &lt;code&gt;super&lt;/code&gt; pokusava pristupiti svojstvima u &lt;code&gt;.prototype&lt;/code&gt; objektu superklase. Odnosno u &lt;code&gt;[[Prototype]]&lt;/code&gt; lancu instance. U primjeru ispod vrijednost polja nije nadjena u prototipu instance i zato je &lt;code&gt;undefined&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;RoditeljskaKlasa&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  roditeljskoPolje &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;DjecijaKlasa&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;RoditeljskaKlasa&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  djecijePolje &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;roditeljskoPolje&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// undefined&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; djecija &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;DjecijaKlasa&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;djecija&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// {roditeljskoPolje: 15, djecijePolje: undefined}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;nadjacavanje-polja-klase&quot;&gt;Nadjacavanje polja klase&lt;/h5&gt;
&lt;p&gt;Kada su u pitanju dupla &lt;u&gt;polja&lt;/u&gt; (polje istog imena u djecijoj i roditeljskoj klasi) postoji mala zackoljica zbog reda inicijalizacije polja klase i izvrsenja koda, koja moze izazvati nepredvidiv ishod. Sa druge strane, da su u pitanju metode rezultat koda bi bio &amp;quot;ispravan&amp;quot;.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Roditelj&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  polje &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;polje&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Dijete&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Roditelj&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  polje &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; dijete &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Dijete&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 0.3&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;dijete&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// { polje: 1000 }&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pozivom &lt;code&gt;console.log()&lt;/code&gt; u super konstruktoru se ispisuje &lt;code&gt;this.polje&lt;/code&gt; prije nego je djecija klasa uspjela dodijeliti svoje &lt;code&gt;polje&lt;/code&gt; instanci.&lt;/p&gt;
&lt;p&gt;Umjesto poziva &lt;code&gt;this.polje&lt;/code&gt; prije nego klasa zavrsi sa kreiranjem objekta, ispisacemo vrijednost polja kroz metodu:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Roditelj&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  polje &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token comment&quot;&gt;// console.log(this.polje);&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;vrijednostPolja&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;polje&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Dijete&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Roditelj&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  polje &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; dijete &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Dijete&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;dijete&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;vrijednostPolja&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1000&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sledeci odjeljak detaljnije ulazi u izvrsavanje koda i zasto se polja ponasaju drugacije:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Da bi razrijesili vrijednost &lt;code&gt;dijete&lt;/code&gt; varijable, pozivamo &lt;code&gt;new Dijete()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;konstruktor &lt;code&gt;Dijete&lt;/code&gt; klase kreira konstruktor jer ga nismo naveli i poziva super konstruktor.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;basic-pre&quot;&gt;
constructor(...args) {
  super(...args);
}
&lt;/pre&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;U njemu se inicijalizuje prazan objekat &lt;code&gt;{}&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Potom polja postaju svojstva tog objekta. Objekat dobija &lt;code&gt;{ polje: 0.3 }&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Izvrsava se konstruktor jer nema drugih polja. Konstruktor sa &lt;code&gt;console.log&lt;/code&gt; ispisuje &lt;code&gt;this.polje&lt;/code&gt; koje je trenutno svojstvo objekta &lt;code&gt;0.3&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Nakon izvrsenja konstruktora &lt;code&gt;Roditelj&lt;/code&gt; klase, izvrsenje se vraca na &lt;code&gt;Dijete&lt;/code&gt; klasu&lt;/li&gt;
&lt;li&gt;Polja u &lt;code&gt;Dijete&lt;/code&gt; klasi se inicijalizuju i &lt;code&gt;polje&lt;/code&gt; dobija novu vrijednost &lt;code&gt;1000&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;Nastavlja se izvrsenje konstruktora, ali u njemu nema vise instrukcija jer ga nismo kreirali i&lt;/li&gt;
&lt;li&gt;Varijabli &lt;code&gt;dijete&lt;/code&gt; se dodjeljuje novi objekat &lt;code&gt;{ polje: 1000 }&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Zasto metode klase, za razliku od polja, rade ispravno?&lt;br /&gt;
Odmah po inicijalizaciji objekta, on za svoj &lt;code&gt;[[Prototype]]&lt;/code&gt; nasljedjuje &lt;code&gt;Dijete.prototype&lt;/code&gt; i pristup svim metodama u djecijoj i roditeljskoj klasi. Kako polja postaju svojstva instance pojedinacno, ona se inicijalizuju tek kada se kreira nova instanca u super klasi. Smijer inicijalizacije je Roditelj → Dijete.&lt;/p&gt;
&lt;h4 id=&quot;static-svojstva&quot;&gt;&lt;code&gt;static&lt;/code&gt; svojstva&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Polje postaje svojstvo instance&lt;/li&gt;
&lt;li&gt;Metoda postaje dio prototipnog lanca&lt;/li&gt;
&lt;li&gt;&lt;u&gt;Staticna metoda je direktno svojstvo klase&lt;/u&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Klasa&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  ime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Tea&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// objekat.ime = Tea&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;static&lt;/span&gt; godine &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;23&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Klasa.godine = 23&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;ispisInfo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Klasa.prototype.ispisInfo = function()&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;Ime: &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ime&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;. Godine &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;godine&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; objekat &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Klasa&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;objekat&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ispisInfo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Ime: Tea. Godine: undefined.&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;dir&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Klasa&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;godine&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 23&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sada kada imamo osnovno znanje o metodama i poljima mozemo se vratiti kljucnoj rijeci &lt;code&gt;super&lt;/code&gt; i osvrnuti kako ona zapravo radi na &lt;code&gt;static&lt;/code&gt; poljima. Ispod vidimo djeciju klasu koja prosiruje roditeljsku. Obe imaju &lt;code&gt;static&lt;/code&gt; polje i kao takvo postaje svojstvo klase. Klase nasljedjuju jedna drugu a &lt;code&gt;super&lt;/code&gt; trazi svojstvo u &lt;code&gt;[[Prototype]]&lt;/code&gt; tako da:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;RoditeljskaKlasa&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;static&lt;/span&gt; rPolje &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// RoditeljskaKlasa.rPolje = 100;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;DjecijaKlasa&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;RoditeljskaKlasa&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;static&lt;/span&gt; dPolje &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;rPolje &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// DjecijaKlasa.dPolje = 100 + 1;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; djecija &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;DjecijaKlasa&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;djecija&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// {} &lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// instanca je prazna&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;dir&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;DjecijaKlasa&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Poslednja linija u DevTools konzoli ispisuje sledece:&lt;/p&gt;
&lt;pre class=&quot;basic-pre&quot;&gt;
× class DjecijaKlasa (**)
     dPolje: 101 (**)
     length: 0
     name: &#39;DjecijaKlasa&#39;
   &gt; prototype: &#39;RoditeljskaKlasa&#39;
       arguments: (...)
       caller: (...)
     × [[Prototype]]: class RoditeljskaKlasa (**)
          rPolje: 100 (**)
          length: 0
          name: &quot;RoditeljskaKlasa&quot;
        &gt; prototype: {constructor: ƒ}
          ...
&lt;/pre&gt;
&lt;h4 id=&quot;super-u-objektu&quot;&gt;&lt;code&gt;super&lt;/code&gt; u objektu&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;super&lt;/code&gt; ide uz prototipni lanac nasljedjivanja sve dok ne nadje super objekat koji ima trazeno svojstvo.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; osoba &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;ime&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Jana Doe&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;sePredstavlja&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;Ja sam &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ime&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; student &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;__proto__&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; osoba&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; senior &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;__proto__&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; student&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;ime&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Teo&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;sePredstavlja&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;   &lt;span class=&quot;token comment&quot;&gt;// [[HomeObject]] = senior&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sePredstavlja&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;senior&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sePredstavlja&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Ja sam Teo&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Kada u metodi koristimo kljucnu rijec &lt;code&gt;super&lt;/code&gt;, ona veze metodu sa objekatom u kom se nalazi koristeci posebno &lt;code&gt;[[HomeObject]]&lt;/code&gt; svojstvo funkcije. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;To svojstvo imaju samo funkcije stilizovane kao metode &lt;code&gt;metoda() {...}&lt;/code&gt;. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;[[HomeObject]]&lt;/code&gt; pamti objekat u kom je funkcija originalno definisana i &lt;code&gt;super&lt;/code&gt; ovu vezu koristi za razrjesavanje metoda i roditeljskih prototipa.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; objekat &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;metoda&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token comment&quot;&gt;// objekat.metoda.[[HomeObject]] = objekat;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Klasa&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;metoda&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token comment&quot;&gt;// Klasa.prototype.metoda.[[HomeObject]] = Klasa.prototype;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;funkcija&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// funkcija.[[HomeObject]] = undefined;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Kada je &lt;code&gt;super&lt;/code&gt; metoda pozvana, JavaScript engine trazi &lt;code&gt;super&lt;/code&gt; metodu u &lt;code&gt;[[Prototype]]&lt;/code&gt;-u &lt;code&gt;[[HomeObject]]&lt;/code&gt;-a. Ovo osigurava da je nadjena metoda naslijedjena, a ne dio trenutnog objekta.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;RKlasa&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;metoda&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Zdravo iz roditeljske metode&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;DKlasa&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;RKlasa&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;metoda&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;br /&gt;    &lt;span class=&quot;token comment&quot;&gt;// jer metoda() postaje metoda DKlasa.prototype objekta&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token comment&quot;&gt;// DKlasa.prototype.metoda.[[HomeObject]] = DKlasa.prototype&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;metoda&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;    &lt;span class=&quot;token comment&quot;&gt;// super trazi .metoda() u DKlasa.prototype.[[Prototype]] lancu&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Zdravo iz djecije metode&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;DKlasa&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;metoda&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Zdravo iz roditeljske metode&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Zdravo iz djecije metode&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;dir&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;DKlasa&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Hajde da vidimo u konzoli gdje je pronasao &lt;code&gt;super.metoda()&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;basic-pre&quot;&gt;
× class DKlasa
      length: 0
      name: &#39;DKlasa&#39;
    × prototype: (**)
       &gt; constructor: class DKlasa
       &gt; metoda: ƒ metoda() (*)
       × [[Prototype]]: (***)
          &gt; constructor: class RKlasa`
          &gt; metoda: ƒ metoda()
          &gt; [[Prototype]]: Object
      arguments: (...)
      caller: (...)
    &gt; [[Prototype]]: class RKlasa
&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;spam&gt;Na liniji sa * je oznacena metoda u kojoj smo pozvali &lt;code&gt;super.metoda()&lt;/code&gt;&lt;/spam&gt;&lt;/li&gt;
&lt;li&gt;&lt;spam&gt;Na liniji sa ** je objekat u kojoj je ta metoda kreirana &lt;code&gt;[[HomeObject]]&lt;/code&gt;&lt;/spam&gt;&lt;/li&gt;
&lt;li&gt;&lt;spam&gt;Na liniji sa *** se nalazi &lt;code&gt;[[Prototype]]&lt;/code&gt; gdje pocinje potraga za super metodom&lt;/spam&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;[[HomeObject]]&lt;/code&gt; bi u obliku objekta za navedeni primjer mogli predstaviti ovako:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;HomeObject&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; DKlasa&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;protototype&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;DKlasa&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;metoda&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ƒunction&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;metoda&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Zdravo iz djecije metode&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;Prototype&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token literal-property property&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;RKlasa&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token literal-property property&quot;&gt;metoda&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ƒunction&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;      console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Zdravo iz roditeljske metode&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;Prototype&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;privatna-polja-i-metode&quot;&gt;Privatna polja i metode&lt;/h2&gt;
&lt;p&gt;Do sada su klase bile iskljucivo javne u JavaScript-u, za razliku od nekih drugih jezika. ES2020 uvodi privatne clanove (polja i metode) klase. A da bi neki clan bio privatan koristimo &lt;code&gt;#&lt;/code&gt; prefiks i ovakvi clanovi su dostupna samo iz klase. Ne mogu biti nasljedjeni.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Osoba&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  #ime&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  #prezime&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;ime&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; prezime&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;#ime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Osoba&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;#validiraj&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ime&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;#prezime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Osoba&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;#validiraj&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;prezime&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;get&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;punoIme&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;#ime &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39; &#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;#prezime&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;#validiraj&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;typeof&lt;/span&gt; str &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; str&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; str&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Vrijedno mora biti string, sa vise od 2 karaktera&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; osoba &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Osoba&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Marta&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Martinovic&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;osoba&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;punoIme&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Marta Martinovic&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Student&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Osoba&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;ime&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; prezime&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; smijer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ime&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; prezime&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;smijer &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; smijer&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; student &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Student&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Lepa&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Cvetic&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;CS&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// student = { smijer: &#39;CS&#39;, #ime: &#39;Lepa&#39;, #prezime: &#39;Cvetic&#39; };&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; ime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Osoba&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;#validiraj&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Anja&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// SyntaxError: &lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Private field &#39;#validiraj&#39; must be declared in an enclosing class&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;U primjeru iznad smo inicijalizovali polja &lt;code&gt;#ime&lt;/code&gt; i &lt;code&gt;#prezime&lt;/code&gt;, kao i staticnu metodu &lt;code&gt;#validiraj&lt;/code&gt;. Navedeni clanovi su dostupni &lt;em&gt;samo&lt;/em&gt; iz klase u kojoj su definisani. Za postavljanje vrijednosti i citanje privatnih clanova izvan klase pristupljeno je javnim metodama koje to rade iznutra.&lt;/p&gt;
&lt;p class=&quot;tip&quot;&gt;Privatno i javno svojstvo istog imena ne stvaraju konflikt.&lt;/p&gt;
&lt;h3 id=&quot;privatna-svojstva-sa-weakmap&quot;&gt;Privatna svojstva sa WeakMap&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;WeakMap&lt;/code&gt; je kolekcija (kljuc/vrijednost) parova ciji &lt;em&gt;kljuc mora biti objekat&lt;/em&gt;, dok vrijednost moze biti proizvoljnog tipa (sto se razlikuje od kolekcije &lt;code&gt;Map&lt;/code&gt; koja za kljuc moze imati bilo koju vrijednost).&lt;/p&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 2;&quot;&gt;&lt;code&gt;WakMap&lt;/code&gt; svojstva takodje ne stvaraju jake reference za svoje kljuceve, sto znaci da ako se objekat koji se koristio za kljuc izbrise, njegova vrijednost ce takodje biti uklonjena iz memorije i mape.&lt;/p&gt;
&lt;p&gt;Da bi &lt;code&gt;WeakMap&lt;/code&gt; sakrila svojstvo u ovom primjeru cemo koristiti i modul, odnosno odvojicemo kod. Klasa i &lt;em&gt;privatna&lt;/em&gt; varijabla ce imati svoj modul i iz njega cemo eksportovati samo klasu, ne i privatnu varijablu.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// stack.js&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; _items &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;WeakMap&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Stack&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;	&lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;stack &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;		_items&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; stack&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;	&lt;span class=&quot;token function&quot;&gt;peek&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; _items&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;count &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;	&lt;span class=&quot;token function&quot;&gt;pop&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;		&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;count &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Invalid request, empty stack.&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; _items&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;pop&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;	&lt;span class=&quot;token function&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; _items&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;value&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;	&lt;span class=&quot;token keyword&quot;&gt;get&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; _items&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// app.js &lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;Stack&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;./stack.js&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; stack &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Stack&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Nemojte zaboraviti u HTML fajlu skripti dodati &lt;code&gt;type=&amp;quot;module&amp;quot;&lt;/code&gt; atribut kako bi pretrazivac znao kako tretirati fajl (ili podesite webpack) i pokrenite stranicu kroz server. Ovdje je koristena sintaksa ES6 modula za pretrazivace.&lt;br /&gt;
&lt;em&gt;CommonJS Module&lt;/em&gt; format za &lt;em&gt;Node&lt;/em&gt; je nesto drugaciji:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// stack.js&lt;/span&gt;&lt;br /&gt;module&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;exports &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Stack&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// app.js&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; Stack &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;./stack&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;prosirivanje-ugradjenih-konstruktora&quot;&gt;Prosirivanje ugradjenih konstruktora&lt;/h2&gt;
&lt;p&gt;Nekada zelimo prosiriti mogucnosti ugradjenih konstruktora poput &lt;code&gt;Object&lt;/code&gt;, &lt;code&gt;Array&lt;/code&gt;, &lt;code&gt;Map&lt;/code&gt; i drugih. Recimo da zelimo prosiriti &lt;code&gt;Array&lt;/code&gt; sa klasom za brojeve koja dodaje funkcionalnost poduplavanja i provjeravanja da li je trenutna vrijednost jednaka izvornoj.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;NizBrojeva&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Array&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;args&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;args&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; kopijaNiza &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token literal-property property&quot;&gt;orig&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;concat&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;assign&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getPrototypeOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; kopijaNiza&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;dupliraj&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;broj&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; index&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;index&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; broj &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;jeIzvorni&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;niz&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; izvorniNiz &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getPrototypeOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;niz&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;orig&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;niz&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;izvorniNiz&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; niz &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;NizBrojeva&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;niz&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;dupliraj&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// [2, 4, 8]&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;NizBrojeva&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;jeIzvorni&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;niz&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// false&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;provjera-tipa&quot;&gt;Provjera tipa&lt;/h3&gt;
&lt;p&gt;Ali kako mozemo odrediti tip klase &lt;code&gt;NizBrojeva&lt;/code&gt; koji smo vidjeli iznad?&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;niz &lt;span class=&quot;token keyword&quot;&gt;instanceof&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;NizBrojeva&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// true&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;call&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;niz&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// [object Array]&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;typeof&lt;/span&gt; niz&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// object&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;instanceof&quot;&gt;instanceof&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;instanceof&lt;/code&gt; operator radi na objektima i &lt;u&gt;testira da li se bilo gdje u prototipnom lancu objekta nalaze svojstva &lt;code&gt;.prototype&lt;/code&gt; objekta navedenog konstruktora&lt;/u&gt;. Vraca &lt;code&gt;true&lt;/code&gt; ili &lt;code&gt;false&lt;/code&gt;. Sintakasa je &lt;code&gt;objekat instanceof Konstruktor&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Kako je istina da je &lt;code&gt;niz&lt;/code&gt; instanca klase &lt;code&gt;NizBrojeva&lt;/code&gt;, tako je istina da je i instanca &lt;code&gt;Array&lt;/code&gt; konstruktora jer se njegova prototip svojstva takodje nalaze u lancu prototipa objekta &lt;code&gt;niz&lt;/code&gt;. Na kraju je i instanca &lt;code&gt;Object&lt;/code&gt; konstruktora.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;niz &lt;span class=&quot;token keyword&quot;&gt;instanceof&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// true&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Kako je navedeno, &lt;code&gt;instanceof&lt;/code&gt; provjerava da li se svojstva prototip objekta konstruktora nalaze u prototipnom lancu instance, ali mozemo modifikovati logiku, odnosno navesti uslove koje objekat mora ispuniti da bi se smatrao instancom nekog konstruktora.&lt;/p&gt;
&lt;p&gt;Logiku pisemo u staticnoj metodi konstruktora &lt;code&gt;static [Symbol.hasInstance](objekat)&lt;/code&gt; koja mora vratiti &lt;code&gt;true&lt;/code&gt; ili &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;NizBrojeva&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Array&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;Symbol&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;hasInstance&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;instanca&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; Array&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;isArray&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;instanca&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; niz &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;niz &lt;span class=&quot;token keyword&quot;&gt;instanceof&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;NizBrojeva&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// true&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Znamo da objekat &lt;code&gt;niz&lt;/code&gt; nije naslijedio prototipna svojstva klase &lt;code&gt;NizBrojeva&lt;/code&gt;, ali nasa logika kaze da su svi nizovi instanca klase &lt;code&gt;NizBrojeva&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id=&quot;tostring-metoda&quot;&gt;toString metoda&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;Object&lt;/code&gt; u svom prototipu ima metodu &lt;code&gt;.toString()&lt;/code&gt;. Njegovo podrazumijevano ponasanje na objektu daje &lt;code&gt;[object Object]&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; objekat &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;objekat&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// [object Object]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Super moc ovakvog ponasanja nije ocigledna, ali mozemo posuditi &lt;code&gt;Object.prototype.toString&lt;/code&gt; metodu i primjeniti na drugim podacima kako bi dobili njihov tip.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;call&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1234&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;      &lt;span class=&quot;token comment&quot;&gt;// [object Number]&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;call&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;ab&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;      &lt;span class=&quot;token comment&quot;&gt;// [object String]&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;call&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;111n&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;      &lt;span class=&quot;token comment&quot;&gt;// [object BigInt]&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;call&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;   &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;      &lt;span class=&quot;token comment&quot;&gt;// [object Array]&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;call&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;      &lt;span class=&quot;token comment&quot;&gt;// [object Null]&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;call&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;undefined&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// [object Undefined]&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;call&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// [object Map]&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;call&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Set&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// [object Set]&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;call&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// [object Function]&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;call&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// [object Function]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Zakljucicemo da je &lt;code&gt;{}.toString&lt;/code&gt; naprednija verzija &lt;code&gt;typeof&lt;/code&gt; operatora. On radi na vecini primitivnih tipova podataka, ali &lt;code&gt;null&lt;/code&gt; prepoznaje kao objekat. Dok vecinu tipova objekata prepoznaje samo kao objekte, ne i kao njegov tip.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;{}.toString&lt;/code&gt; metodu smo posudili iz prototipa objekta i da bi je izvrsili u novom kontekstu (kontekstu podatka koji prosljedjujemo) koristimo &lt;code&gt;.call()&lt;/code&gt;. Razlog posudjivanja na ovaj nacin je jer drugi tipovi takodje imaju &lt;code&gt;toString&lt;/code&gt; metodu u svom prototipu, ali one nemaju ovakvo ponasanje, a nalaze se blize u prototipnom lancu nasljedjivanja.&lt;/p&gt;
&lt;p&gt;Instance klasa imaju tip koji nasljedjuju od predefinisanih konstruktora poput &lt;code&gt;[object Object]&lt;/code&gt; ili &lt;code&gt;[object Array]&lt;/code&gt;, ali ako zelimo da &lt;code&gt;{}.toString&lt;/code&gt; metoda razlikuje instance nasih klasa dodacemo im &lt;code&gt;[Symbol.toStringTag]: &#39;Tip&#39;&lt;/code&gt; u svojstvo.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;NizBrojeva&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;Symbol&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;toStringTag&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;NizBrojeva&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; obj &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;NizBrojeva&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;call&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;obj&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// [object NizBrojeva]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;mix-in&quot;&gt;Mix-in&lt;/h2&gt;
&lt;p&gt;U OOP, mixin je klasa sa metodama koje druge klase mogu koristiti bez potrebe da od nje nasljedjuju. Sa ovim mozemo prevazici limitaciju nasljedjivanja u kojoj objekat moze imati samo jedan prototip i klasa moze prosiriti samo jednu klasu.&lt;/p&gt;
&lt;p&gt;Mixini, kao i klase, ohrabruju koristenje vec napisanog koda umjesto dupliciranja (ali sa njima izbjegavamo i potencijalno nepredvidivo nasljedjivanje).&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; mixIn &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;sePredstavlja&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;Ja sam &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ime&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Student&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;ime&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; ime&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;assign&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Student&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; mixIn&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; student &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Student&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Ivana&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;student&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sePredstavlja&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Ja sam Ivana.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Klasi smo dodali nove metode koje ce naslijediti njene instance, a &lt;code&gt;Student&lt;/code&gt; i dalje ima priliku da prosiri jednu klasu.&lt;/p&gt;
&lt;p&gt;Hajde da ispisemo &lt;code&gt;Student&lt;/code&gt; klasu u konzoli i vidimo njena svojstva.&lt;/p&gt;
&lt;pre class=&quot;basic-pre&quot;&gt;
× Student
      length: 1
      name: &#39;Student&#39;
    × prototype:
        &gt; sePredstavlja: ƒ sePredstavlja() // mixIn
        &gt; constructor: class Student
        &gt; [[Prototype]]: Object
      arguments: (...)
      caller: (...)
    &gt; [[Prototype]]: ƒ ()
      ...
&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;Object.assign&lt;/code&gt; metoda je &amp;quot;tajni&amp;quot; sastojak koji je iskoristen za mixin. Ona je kopirala svojstva objekta u drugom argumentu (&lt;i&gt;source&lt;/i&gt;) i dodala u objekat koji smo ponudili kao prvi argument (&lt;i&gt;target&lt;/i&gt;).&lt;br /&gt;
Sintaksa je &lt;code&gt;Object.assign(target, ...sources)&lt;/code&gt;.&lt;/p&gt;
&lt;p class=&quot;tip right-tip&quot;&gt;Ova metoda ne radi &lt;i&gt;&quot;deep cloning&quot;&lt;/i&gt;. Ako je vrijednost svojstva referenca na objekat, to svojstvo se ne klonira vec se kopira referenca na objekat. Vise o prosljedjivanju po referenci na &lt;a href=&quot;https://webdevlpr.com/posts/proslijediti-po-referenci-ili-vrijednosti/&quot;&gt;Proslijediti po referenci ili vrijednosti&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Prototipno nasljedjivanje</title>
    <link href="https://webdevlpr.com/posts/prototipno-nasljedjivanje/"/>
    <id>https://webdevlpr.com/posts/prototipno-nasljedjivanje/</id>
    <updated>2022-11-07T17:00:00Z</updated>
    <summary>JavaScript se bazira na prototipnom nasljedjivanje objekata. Ovaj mehanizam sluzi za prosirivanje objekata bez kopiranja istog koda iznova. Klase su implementirane na osnovu prototipa i ovdje pricamo vise o tome sta se desava u pozadini.</summary>
    <content type="html">&lt;p&gt;Jednostavno receno, prototipsko nasljedjivanje se odnosi na mogucnost pristupa svojstvima jednog objekta iz drugog objekta, sto umanjuje potrebu dupliciranja koda. Klase su implementirane na osnovu prototipa i ovdje pricamo vise o tome sta se desava u pozadini.&lt;/p&gt;
&lt;!-- &lt;figure&gt;
&lt;img loading=&quot;lazy&quot; src=&quot;/static/img/prototipno-nasljedjivanje.png&quot; alt=&quot;Funkcije su objekti u JavaScript-u.&quot; alt=&quot;JavaScript prototipno nasljedjivanje&quot;&gt;
&lt;/figure&gt;  --&gt;
&lt;p&gt;Svaki objekat ima privatno svojstvo &lt;code&gt;[[Prototype]]&lt;/code&gt; koje za vrijednost ima ili &lt;b&gt;referencu na drugi objekat&lt;/b&gt; ili &lt;b&gt;&lt;code&gt;null&lt;/code&gt;&lt;/b&gt;. U primjeru ispod &lt;code&gt;munchkin&lt;/code&gt; objekat za prototip dobija &lt;code&gt;cat&lt;/code&gt; objekat.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; cat &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;says&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;meow&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;talk&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt; says &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;says&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token comment&quot;&gt;// this je uvijek objekat prije tacke _____.svojstvo&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; munchkin &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Odie&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;breed&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Munchkin&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;__proto__&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; cat&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;munchkin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;talk&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Odie says meow!&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;munchkin.talk()&lt;/code&gt; metoda ne postoji u &lt;code&gt;munchkin&lt;/code&gt; objektu, ali kako je njegov prototip &lt;code&gt;cat&lt;/code&gt; objekat, to je sledece mjesto gdje ce JavaScript engine nastaviti potragu. Potom bi je trazio u prototipu &lt;code&gt;cat&lt;/code&gt; objekta, taj objekat potom ima svoj &lt;code&gt;[[Prototype]]&lt;/code&gt;, sve dok trazena metoda ne bude pronadjena ili dok pretraga ne dosegne kraj lanca, odnosno vrijednost &lt;code&gt;null&lt;/code&gt; koja nema prototip i tu pretraga zavrsava sa greskom.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;[[Prototype]]&lt;/code&gt; nije samo apstraktni koncept i da bi ga vidjeli mozemo napisati &lt;code&gt;console.log(munchkin)&lt;/code&gt; i pregledati rezultat u DevTools konzoli.&lt;/p&gt;
&lt;pre class=&quot;basic-pre&quot;&gt;
×  Object
     breed: &quot;Munchkin&quot;
     name: &quot;Odie&quot;
  ×  [[Prototype]]: Object
        says: &quot;meow&quot;
      &gt; talk: ƒ talk()
      × [[Prototype]]: Object
          &gt; constructor: ƒ Object()
          &gt; hasOwnProperty: ƒ hasOwnProperty()
            ... 
&lt;/pre&gt;
&lt;p&gt;Istom prototipu je moguce pristupiti direktno:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;munchkin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// cat&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;munchkin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Object.prototype&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Vise o njemu kasnije&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;munchkin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;  &lt;span class=&quot;token comment&quot;&gt;// null&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Dosegli smo kraj lanca nasljedjivanja za ovaj objekat&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;[[Prototype]]&lt;/code&gt; referenca ne moze ici u krug.&lt;/p&gt;
&lt;style&gt;
  @import url(&#39;https://fonts.googleapis.com/css2?family=Source+Cod+Pro:wght@200;400&amp;display=swap&#39;);
&lt;/style&gt;
&lt;svg style=&quot;width: 100%&quot; viewBox=&quot;0 42 520 300&quot; fill=&quot;none&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
  &lt;rect style=&quot;width: 100%&quot; fill=&quot;none&quot;&gt;&lt;/rect&gt;
  &lt;g id=&quot;cyclic-proto-value&quot; clip-path=&quot;url(#clip0_0_1)&quot;&gt;
    &lt;g id=&quot;TypeError&quot;&gt;
    &lt;text id=&quot;TypeError: Cyclic __proto__ value&quot; fill=&quot;#FD556C&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;0.8em&quot; font-weight=&quot;600&quot; letter-spacing=&quot;0em&quot;&gt;
      &lt;tspan x=&quot;214.537&quot; y=&quot;100.254&quot;&gt;TypeError:
      &lt;/tspan&gt;&lt;tspan x=&quot;230.322&quot; y=&quot;121.255&quot;&gt;Cyclic
      &lt;/tspan&gt;&lt;tspan x=&quot;219.233&quot; y=&quot;143.255&quot;&gt;__proto__
      &lt;/tspan&gt;&lt;tspan x=&quot;236.019&quot; y=&quot;167.255&quot;&gt;value&lt;/tspan&gt;
    &lt;/text&gt;
  &lt;/g&gt;
  &lt;g id=&quot;Objects&quot;&gt;
    &lt;text id=&quot;predator&quot; fill=&quot;#FD556C&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.1em&quot; font-style=&quot;italic&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;42.0312&quot; y=&quot;103.61&quot;&gt;predator&lt;/tspan&gt;&lt;/text&gt;
    &lt;text id=&quot;munchkin&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.1em&quot; font-style=&quot;italic&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;204.531&quot; y=&quot;293.61&quot;&gt;munchkin&lt;/tspan&gt;&lt;/text&gt;
    &lt;text id=&quot;cat&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.1em&quot; font-style=&quot;italic&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;407.012&quot; y=&quot;103.61&quot;&gt;cat&lt;/tspan&gt;&lt;/text&gt;
  &lt;/g&gt;
  &lt;g id=&quot;Hexagon&quot;&gt;
    &lt;path id=&quot;path1425&quot; d=&quot;M335 334.5L252.5 382L170 334.5V239.5L252.5 192L335 239.5V334.5Z&quot; stroke=&quot;var(--text-color)&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;
    &lt;path id=&quot;path1425_2&quot; d=&quot;M344.297 315.323L274.42 379.974L183.426 352.001L162.308 259.378L232.186 194.727L323.18 222.7L344.297 315.323Z&quot; stroke=&quot;var(--text-color)&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;
  &lt;/g&gt;
  &lt;g id=&quot;Hexagon_2&quot;&gt;
    &lt;path id=&quot;path1425_3&quot; d=&quot;M518.548 124.935L448.671 189.585L357.676 161.612L336.559 68.9891L406.436 4.3388L497.431 32.3117L518.548 124.935Z&quot; stroke=&quot;var(--text-color)&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;
    &lt;path id=&quot;path1425_4&quot; d=&quot;M510 143.5L427.5 191L345 143.5V48.5L427.5 1L510 48.5V143.5Z&quot; stroke=&quot;var(--text-color)&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;
  &lt;/g&gt;
  &lt;g id=&quot;Hexagon_3&quot;&gt;
    &lt;path id=&quot;path1425_5&quot; d=&quot;M176 144.5L93 192L10 144.5V49.5L93 2L176 49.5V144.5Z&quot; stroke=&quot;#FD556C&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;
    &lt;path id=&quot;path1425_6&quot; d=&quot;M183.548 123.935L113.671 188.585L22.6759 160.612L1.55864 67.9891L71.436 3.3388L162.431 31.3117L183.548 123.935Z&quot; stroke=&quot;#FD556C&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;
  &lt;/g&gt;
  &lt;g id=&quot;Arrows&quot;&gt;
    &lt;path id=&quot;Arrow 10&quot; d=&quot;M308 206.021L319.546 206.137L313.874 196.079L308 206.021ZM316.33 202.47L363.491 175.871L362.509 174.129L315.348 200.728L316.33 202.47Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
    &lt;path id=&quot;Arrow 11&quot; d=&quot;M150 176L154.589 186.596L161.471 177.324L150 176ZM197.12 209.73L157.823 180.561L156.631 182.167L195.928 211.336L197.12 209.73Z&quot; fill=&quot;#FD556C&quot;&gt;&lt;/path&gt;
    &lt;path id=&quot;Arrow 15&quot; d=&quot;M320 70L310 64.2265L310 75.7735L320 70ZM197 71L311 71L311 69L197 69L197 71Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
  &lt;/g&gt;
  &lt;/g&gt;
  &lt;defs&gt;
    &lt;clipPath id=&quot;clip0_0_1&quot;&gt;
      &lt;rect width=&quot;521&quot; height=&quot;382&quot; fill=&quot;white&quot;&gt;&lt;/rect&gt;
    &lt;/clipPath&gt;
  &lt;/defs&gt;
&lt;/svg&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; predator &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; cat &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;      &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;__proto__&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; predator &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; munchkin &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;__proto__&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; cat &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;predator&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__ &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; munchkin&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// TypeError: Cyclic __proto__ value&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;for..in&lt;/code&gt; petlje su svjesne naslijedjenih svojstava sto znaci da ce se data akcija ponoviti i za nasljedjena svojstva (nije slucaj sa klasama). Vidljive su petljama jer deskriptor &lt;code&gt;enumerable&lt;/code&gt; ovih svojstava nije podesen da bude &lt;code&gt;false&lt;/code&gt;. Deskriptore je moguce podesiti rucno.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; predator &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;dangerous&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;very&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; cat &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;      &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;says&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;meow&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;__proto__&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; predator &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; munchkin &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Odie&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;__proto__&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; cat &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; prop &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; munchkin&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;prop&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// name, says, dangerous&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Postoji nacin da testiramo da li je svojstvo dio objekta ili ne sa &lt;code&gt;obj.hasOwnProperty(key)&lt;/code&gt; — vraca &lt;code&gt;true&lt;/code&gt; ili &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; key &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; munchkin&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;munchkin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;hasOwnProperty&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;key&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;key&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// name&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;key&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// says, dangerous&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ili mozemo objekat pretvoriti u niz. On nece uzeti u obzir nasljedjena svojstva. Za nizove je prikladnije koristiti &lt;code&gt;for..of&lt;/code&gt; petlju:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; munchkinArray &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;keys&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;munchkin&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// [&#39;name&#39;]&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; key &lt;span class=&quot;token keyword&quot;&gt;of&lt;/span&gt; munchkinArray&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;key&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// name&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;definisanje-prototipa&quot;&gt;Definisanje prototipa&lt;/h2&gt;
&lt;p&gt;U primjerima iznad je koristeno svojstvo &lt;code&gt;__proto__&lt;/code&gt;. On je (getter i setter) svojstvo za pristupanje prototipu objekta. Smatra se zastarjelim, ali ga je prihvatljivo koristiti za vrijeme kreiranje objekta &lt;code&gt;{__proto__: ...}&lt;/code&gt;.  Preporuceni nacin za dodjeljivanje prototipa za vrijeme kreiranje objekta je &lt;code&gt;Object.create(prototype, propertiesObject)&lt;/code&gt; (ili koristenjem klase). Prvi parametar je objekat koji ce novi objekat naslijediti, a kroz drugi opcioni parametar &lt;code&gt;propertiesObject&lt;/code&gt; mozemo dodavati svojstva i podesiti njihove deskriptore.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; munchkin &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;cat&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;br /&gt;  &lt;span class=&quot;token string-property property&quot;&gt;&#39;name&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;br /&gt;    &lt;span class=&quot;token literal-property property&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Odie&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;br /&gt;    &lt;span class=&quot;token literal-property property&quot;&gt;enumerable&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// prikazuje se u petljama&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token literal-property property&quot;&gt;writable&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// promjenjiva vrijednost&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token literal-property property&quot;&gt;configurable&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// deskriptori se mogu modifikovati, a svojstvo brisati&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token string-property property&quot;&gt;&#39;breed&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token literal-property property&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Munchkin&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token literal-property property&quot;&gt;enumerable&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token comment&quot;&gt;// nenavedeni deskriptori imaju vrijednost false&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sada necemo definisati svojstva kroz drugi parametar u &lt;code&gt;Object.create()&lt;/code&gt;. Ukoliko u sklopu njega ne navedemo neki deksriptor, njegova vrijednost ce biti &lt;code&gt;false&lt;/code&gt;. Ako svi trebaju imati vrijednost &lt;code&gt;true&lt;/code&gt; navodjenje svakog deskriptora je suvisno. Smislenije je dodati svojstva nakon kreiranja objekta:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; munchkin &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;cat&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;munchkin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Odie&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// ili __proto__ *za vrijeme kreiranje objekta*&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; korat &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;__proto__&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; cat&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Whiskers&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;breed&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;korat&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Za mijenjanje prototipa postojecem objektu koristimo &lt;code&gt;Object.setPrototypeOf(obj, proto)&lt;/code&gt; metodu:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; predator &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;dangerous&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;very&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; cat &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;says&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;meow&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; munchkin &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Odie&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cat&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__ &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; predator&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// zastarjelo&lt;/span&gt;&lt;br /&gt;Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setPrototypeOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;munchkin&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; cat&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;munchkin&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;dangerous&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// very&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Medjutim, dinamicno dodjeljivanje prototipa treba izbjegavati. Vecina interpretera JavaScript koda je optimizovalo mehanizam prototipnog nasljedjivanja. Ddefinisanje prototipa objekta nakon njegovog kreiranja ugrozava ovu optimizaciju. Ukoliko performans i brzina izvrsavanja koda nije vazna, onda ovo nije problem (ali onda prototip gubi svrhu). U suprotnom, dinamicno definisanje prototipa treba izbjegavati ako je moguce dodijeliti prototip za vrijeme kreiranja objekta.&lt;/p&gt;
&lt;p&gt;Za dobijanje prototipa nekog objekta umjesto &lt;code&gt;__proto__&lt;/code&gt; svojstva tu treba koristiti &lt;code&gt;Object.getPrototypeOf(obj)&lt;/code&gt; metoda.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; cat &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;says&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;meow&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; munchkin &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;cat&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// munchkin.__proto__; // zastarjelo&lt;/span&gt;&lt;br /&gt;Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getPrototypeOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;munchkin&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// cat&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Jos jedan nacin za definisanje prototipa objekta je kroz konstruktor..&lt;/p&gt;
&lt;h2 id=&quot;funkcija-prototype&quot;&gt;Funkcija.prototype svojstvo&lt;/h2&gt;
&lt;p&gt;Za razumijevanje ove teme je, izmedju ostalog, neophodno poznavanje konstruktora i operatora &lt;code&gt;new&lt;/code&gt;. Ukratko, konstruktor je &lt;u&gt;funkcija&lt;/u&gt; koja inicijalizuje objekat. Poziva se sa kljucnom rijeci &lt;code&gt;new&lt;/code&gt; i po konvenciji se imenuje sa prvim velikim slovom. Funkcija za rezultat vraca objekat i omogucava kreiranje vise slicnih objekata.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Cat&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;name&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; breed&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;	&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; name&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;	&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;breed &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; breed&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; odie &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Cat&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Odie&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Munchkin&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; whiskers &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Cat&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Whiskers&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Korat&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;odie&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;  &lt;span class=&quot;token comment&quot;&gt;// Cat {name: &#39;Odie&#39;, breed: &#39;Munchkin&#39;}&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;whiskers&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;breed&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;  &lt;span class=&quot;token comment&quot;&gt;// Korat&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;prototype-svojstvo&quot;&gt;prototype svojstvo&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://webdevlpr.com/posts/funkcije-su-objekti/&quot;&gt;Funkcije su objekti&lt;/a&gt;. A objekti imaju svojstva (key-value parove). Uz to funkcije su specificne po tome sto imaju predefinisano &lt;code&gt;fn.prototype&lt;/code&gt; svojstvo. Ovdje treba napraviti razliku izmedju &lt;code&gt;.prototype&lt;/code&gt; i &lt;code&gt;[[Prototype]]&lt;/code&gt; objekta. &lt;code&gt;[[Prototype]]&lt;/code&gt; je prototip koji funkcija (ili bilo koji drugi objekat nasledjuje), &lt;code&gt;fn.prototype&lt;/code&gt; je &lt;em&gt;predefinisano&lt;/em&gt; svojstvo svih funkcija i sada pokusavamo shvatiti njegovu funkciju.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;funkcijaJeObj&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;dir&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;funkcijaJeObj&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 3&quot;&gt;Umjesto &lt;code&gt;console.log()&lt;/code&gt; je koristen &lt;code&gt;console.dir()&lt;/code&gt; jer &lt;i&gt;log&lt;/i&gt; prikazuje &lt;code&gt;toString&lt;/code&gt; reprezentaciju funkcije (njeno tijelo u string obliku koje se moze pozvati dodavanjem zagrada), dok &lt;i&gt;dir&lt;/i&gt; prikazuje interaktivnu listu svojstava JavaScript objekta.&lt;/p&gt;
&lt;p&gt;Rezultat u konzoli:&lt;/p&gt;
&lt;pre class=&quot;basic-pre&quot;&gt;
×  ƒ funkcijaJeObj()
      arguments: null
      caller: null
      length: 0
      name: &quot;funkcijaJeObj&quot;
    × prototype: 
         &gt; constructor: ƒ funkcijaJeObj()
         &gt; [[Prototype]]: Object
      [[FunctionLocation]]: app.js:1
    &gt; [[Prototype]]: ƒ ()
    &gt; [[Scopes]]: Scopes[1]
&lt;/pre&gt;
&lt;p&gt;Iako nismo sami dodali &lt;code&gt;.prototype&lt;/code&gt; svojstvo funkciji, ono je tu i vec sadrzi objekat sa nekim svojstvima: &lt;code&gt;{constructor: ƒ, [[Prototype]]: Object}&lt;/code&gt;.&lt;br /&gt;
Mozemo dodavati i modifikovati svojstva &lt;code&gt;.prototype&lt;/code&gt;-a, ali ono ima efekat samo kada se pozove funkcija sa kljucnom rijeci &lt;code&gt;new&lt;/code&gt;. Zasto? Jer se konstruktor funkcija poziva sa kljucnom rijeci &lt;code&gt;new&lt;/code&gt; da bi kreirala novi objekat i njeno &lt;code&gt;prototype&lt;/code&gt; svojstvo u procesu kreiranja postaje referenca &lt;code&gt;[[Prototype]]&lt;/code&gt; objekta koji je kreirala.&lt;br /&gt;
&lt;code&gt;constructor()&lt;/code&gt; metoda uvijek pokazuje na samu funkciju sto ce se vidjeti u sledecem primjeru..&lt;/p&gt;
&lt;p&gt;Kreiracemo praznu konstruktor funkciju i dodati metodu u njen &lt;code&gt;.prototype&lt;/code&gt; objekat. Ako pozovemo funkciju, ona ce nam vratiti prazan objekat, ali ce objekat imati pristup metodi koja je dodana &lt;code&gt;.prototype&lt;/code&gt;-u funkcije iz koje je nastao:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// Kreiranje prazne konstruktor fn&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Funkcija&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Dodavanje metode u njeno .protoype svojstvo&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token class-name&quot;&gt;Funkcija&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;svojstvo&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Zdravo iz prototipa!&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; obj1 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Funkcija&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Jer obj1 ima referencu na .prototype za svoj  [[Prototype]] &lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Je isto kao da smo napisali:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// obj1.__proto__.svojstvo = function() {...}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;obj1&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;svojstvo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Zdravo iz prototipa!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Funkcija&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;constructor&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Funkcija() {}&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;obj1&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;constructor &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; Funkcija&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// true&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;U konzoli:&lt;/p&gt;
&lt;pre class=&quot;basic-pre&quot;&gt;
× Funkcija {}
   × [[Prototype]]: Object
      &gt; svojstvo: ƒ ()
      &gt; constructor: ƒ Funkcija()
      &gt; [[Prototype]]: Object
&lt;/pre&gt;
&lt;p&gt;Ovaj odnos &lt;code&gt;prototype&lt;/code&gt; svojstva konstruktora i &lt;code&gt;[[Prototype]]&lt;/code&gt; svojstva objekta je mozda vizuelno lakse razumjeti:&lt;/p&gt;
&lt;svg id=&quot;svgg&quot; style=&quot;width: 100%&quot; viewBox=&quot;0 0 798 463&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; fill=&quot;none&quot;&gt;
  &lt;g id=&quot;Frame 6&quot; clip-path=&quot;url(#clip0_7_45)&quot;&gt;
    &lt;rect id=&quot;Rectangle 1&quot; x=&quot;16&quot; y=&quot;45&quot; width=&quot;162&quot; height=&quot;38&quot; stroke=&quot;var(--text-color)&quot; stroke-width=&quot;2&quot;&gt;&lt;/rect&gt;
    &lt;rect id=&quot;Rectangle 4&quot; x=&quot;511&quot; y=&quot;409&quot; width=&quot;162&quot; height=&quot;38&quot; stroke=&quot;var(--text-color)&quot; stroke-width=&quot;2&quot;&gt;&lt;/rect&gt;
    &lt;text id=&quot;Funkcija&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;&#39;Source Code Pro&#39;, monospace&quot; font-size=&quot;1.1em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;49.0312&quot; y=&quot;71.11&quot;&gt;Funkcija&lt;/tspan&gt;&lt;/text&gt;
    &lt;text id=&quot;objekat&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;&#39;Source Code Pro&#39;, monospace&quot; font-size=&quot;1.1em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;550.027&quot; y=&quot;435.11&quot;&gt;objekat&lt;/tspan&gt;&lt;/text&gt;
    &lt;text id=&quot;.prototype&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;&#39;Source Code Pro&#39;, monospace&quot; font-size=&quot;1.1em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;215&quot; y=&quot;55.61&quot;&gt;.prototype&lt;/tspan&gt;&lt;/text&gt;
    &lt;text id=&quot;new Funkcija()&quot; transform=&quot;translate(364 162)&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;&#39;Source Code Pro&#39;, monospace&quot; font-size=&quot;1.1em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;0&quot; y=&quot;19.61&quot;&gt;new Funkcija()&lt;/tspan&gt;&lt;/text&gt;
    &lt;text id=&quot;[[Prototype]]&quot; transform=&quot;translate(510 255)&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;&#39;Source Code Pro&#39;, monospace&quot; font-size=&quot;1.1em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;0&quot; y=&quot;19.61&quot;&gt;[[Prototype]]&lt;/tspan&gt;&lt;/text&gt;
    &lt;text id=&quot;[[Prototype]]: Object&quot; transform=&quot;translate(438 83)&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;&#39;Source Code Pro&#39;, monospace&quot; font-size=&quot;1.1em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;0&quot; y=&quot;19.61&quot;&gt;[[Prototype]]: &amp;#13;Object&lt;/tspan&gt;&lt;/text&gt;
    &lt;text id=&quot;__proto__&quot; transform=&quot;translate(646 346)&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;&#39;Source Code Pro&#39;, monospace&quot; font-size=&quot;1.1em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;0&quot; y=&quot;19.61&quot;&gt;__proto__&lt;/tspan&gt;&lt;/text&gt;
    &lt;text id=&quot;svojstvo: &amp;#198;&amp;#146; svojstvo()&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;&#39;Source Code Pro&#39;, monospace&quot; font-size=&quot;1.1em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;441&quot; y=&quot;42.61&quot;&gt;svojstvo:&amp;#13;&amp;#x192; svojstvo()&lt;/tspan&gt;&lt;/text&gt;
    &lt;text id=&quot;constructor : &amp;#198;&amp;#146; Funkcija()&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;&#39;Source Code Pro&#39;, monospace&quot; font-size=&quot;1.1em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;441&quot; y=&quot;72.61&quot;&gt;constructor&amp;#13;: &amp;#x192; Funkcija()&lt;/tspan&gt;&lt;/text&gt;
    &lt;path id=&quot;Arrow 1&quot; d=&quot;M359 69L349 63.2265L349 74.7735L359 69ZM210 70L350 70L350 68L210 68L210 70Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
    &lt;path id=&quot;Arrow 2&quot; d=&quot;M542 228L547.774 218L536.226 218L542 228ZM543 219L543 162L541 162L541 219L543 219Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
    &lt;path id=&quot;Arrow 6&quot; d=&quot;M634 162L628.226 172L639.774 172L634 162ZM635 228L635 171L633 171L633 228L635 228Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
    &lt;path id=&quot;Arrow 4&quot; d=&quot;M542 371L547.774 361L536.226 361L542 371ZM543 362L543 308L541 308L541 362L543 362Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
    &lt;path id=&quot;Arrow 5&quot; d=&quot;M634 310L628.226 320L639.774 320L634 310ZM635 373L635 319L633 319L633 373L635 373Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
    &lt;text id=&quot;{&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;&#39;Source Code Pro&#39;, monospace&quot; font-size=&quot;128&quot; font-weight=&quot;200&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;371&quot; y=&quot;106.004&quot;&gt;{&lt;/tspan&gt;&lt;/text&gt;
    &lt;text id=&quot;}&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;&#39;Source Code Pro&#39;, monospace&quot; font-size=&quot;128&quot; font-weight=&quot;200&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;729&quot; y=&quot;106.004&quot;&gt;}&lt;/tspan&gt;&lt;/text&gt;
  &lt;/g&gt;
  &lt;defs&gt;
    &lt;clipPath id=&quot;clip0_7_45&quot;&gt;
    &lt;rect width=&quot;798&quot; height=&quot;463&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/rect&gt;
    &lt;/clipPath&gt;
  &lt;/defs&gt;
&lt;/svg&gt;
&lt;h2 id=&quot;predefinisani-prototipi&quot;&gt;Predefinisani prototipi&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Rekli smo da sve funkcije imaju &lt;code&gt;prototype&lt;/code&gt; svojstvo. Medjutim, ono sluzi samo funkcijama koje se izvrsavaju sa kljucnom rijeci &lt;code&gt;new&lt;/code&gt; za definisanje prototipa &lt;code&gt;[[Prototype]]&lt;/code&gt; objekta koji ce &lt;code&gt;new&lt;/code&gt; inicijalizovati.&lt;br /&gt;
&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Sa druge strane, JavaScript dopusta kreiranje raznih objekata koristeci &lt;code&gt;new&lt;/code&gt;, kao &lt;code&gt;let arr = new Array()&lt;/code&gt;, &lt;code&gt;let date = new Date()&lt;/code&gt;, &lt;code&gt;let obj = new Object()&lt;/code&gt;, &lt;code&gt;let fn = new Function()&lt;/code&gt;, &lt;code&gt;let map = new Map()&lt;/code&gt;, &lt;code&gt;let str = new String()&lt;/code&gt; itd. Mozemo zakljuciti da svaki put kada kreiramo objekat za to koristimo konstruktor. Cak i njihova imena po konvenciji pocinju velikim slovom.&lt;br /&gt;
&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Ovi predefinisani konstruktori u &lt;code&gt;prototype&lt;/code&gt; svojstvu imaju predefinisane metode i svojstva koje se mogu koristiti na novo kreiranom objektu jer ih je objekat naslijedio. U konzoli cemo ispisati sadrzaj &lt;code&gt;prototype&lt;/code&gt; svojstva jednog od konstruktora da bi vidjeli kako izgleda.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// predefinisane metode za manipulisanje nizova&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token literal-property property&quot;&gt;at&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ƒ &lt;span class=&quot;token function&quot;&gt;at&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token literal-property property&quot;&gt;concat&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ƒ &lt;span class=&quot;token function&quot;&gt;concat&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// ... &lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token literal-property property&quot;&gt;sort&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ƒ &lt;span class=&quot;token function&quot;&gt;sort&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token literal-property property&quot;&gt;splice&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ƒ &lt;span class=&quot;token function&quot;&gt;splice&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token literal-property property&quot;&gt;toLocaleString&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ƒ &lt;span class=&quot;token function&quot;&gt;toLocaleString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token literal-property property&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ƒ &lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token literal-property property&quot;&gt;unshift&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ƒ &lt;span class=&quot;token function&quot;&gt;unshift&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token literal-property property&quot;&gt;values&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ƒ &lt;span class=&quot;token function&quot;&gt;values&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;Symbol&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Symbol&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;iterator&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ƒ &lt;span class=&quot;token function&quot;&gt;values&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;Prototype&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Object&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ovo su sve one vec vrlo poznate metode za nizove. Kreiranjem objekta sa &lt;code&gt;new Array()&lt;/code&gt; (ili skraceno &lt;code&gt;[]&lt;/code&gt;), novoinicijalizovani niz dobija &lt;code&gt;Array.prototype&lt;/code&gt; za svoj &lt;code&gt;[[Prototype]]&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; arr &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// isto kao let arr = []&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arr&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__ &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// true&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;svg id=&quot;svgg&quot; style=&quot;width: 100%&quot; viewBox=&quot;0 0 798 463&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; fill=&quot;none&quot;&gt;
  &lt;g id=&quot;Frame 6&quot; clip-path=&quot;url(#clip0_7_45)&quot;&gt;
    &lt;rect id=&quot;Rectangle 1&quot; x=&quot;16&quot; y=&quot;45&quot; width=&quot;162&quot; height=&quot;38&quot; stroke=&quot;var(--text-color)&quot; stroke-width=&quot;2&quot;&gt;&lt;/rect&gt;
    &lt;rect id=&quot;Rectangle 4&quot; x=&quot;511&quot; y=&quot;409&quot; width=&quot;162&quot; height=&quot;38&quot; stroke=&quot;var(--text-color)&quot; stroke-width=&quot;2&quot;&gt;&lt;/rect&gt;
    &lt;text id=&quot;Funkcija&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;&#39;Source Code Pro&#39;, monospace&quot; font-size=&quot;1.1em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;67.0312&quot; y=&quot;71.11&quot;&gt;Array&lt;/tspan&gt;&lt;/text&gt;
    &lt;text id=&quot;objekat&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;&#39;Source Code Pro&#39;, monospace&quot; font-size=&quot;1.1em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;574.027&quot; y=&quot;435.11&quot;&gt;arr&lt;/tspan&gt;&lt;/text&gt;
    &lt;text id=&quot;.prototype&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;&#39;Source Code Pro&#39;, monospace&quot; font-size=&quot;1.1em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;215&quot; y=&quot;55.61&quot;&gt;.prototype&lt;/tspan&gt;&lt;/text&gt;
    &lt;text id=&quot;new Funkcija()&quot; transform=&quot;translate(364 162)&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;&#39;Source Code Pro&#39;, monospace&quot; font-size=&quot;1.1em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;37&quot; y=&quot;19.61&quot;&gt;new Array()&lt;/tspan&gt;&lt;/text&gt;
    &lt;text id=&quot;[[Prototype]]&quot; transform=&quot;translate(510 255)&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;&#39;Source Code Pro&#39;, monospace&quot; font-size=&quot;1.1em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;0&quot; y=&quot;19.61&quot;&gt;[[Prototype]]&lt;/tspan&gt;&lt;/text&gt;
    &lt;text id=&quot;[[Prototype]]: Object&quot; transform=&quot;translate(438 83)&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;&#39;Source Code Pro&#39;, monospace&quot; font-size=&quot;1.1em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;0&quot; y=&quot;19.61&quot;&gt;[[Prototype]]: Object&lt;/tspan&gt;&lt;/text&gt;
    &lt;text id=&quot;__proto__&quot; transform=&quot;translate(646 346)&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;&#39;Source Code Pro&#39;, monospace&quot; font-size=&quot;1.1em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;0&quot; y=&quot;19.61&quot;&gt;__proto__&lt;/tspan&gt;&lt;/text&gt;
    &lt;text id=&quot;svojstvo: &amp;#198;&amp;#146; svojstvo()&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;&#39;Source Code Pro&#39;, monospace&quot; font-size=&quot;1.1em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;441&quot; y=&quot;42.61&quot;&gt;at: ƒ at()&lt;/tspan&gt;&lt;/text&gt;
    &lt;text id=&quot;constructor : &amp;#198;&amp;#146; Funkcija()&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;&#39;Source Code Pro&#39;, monospace&quot; font-size=&quot;1.1em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;441&quot; y=&quot;72.61&quot;&gt;concat: ƒ concat()&lt;/tspan&gt;&lt;/text&gt;
    &lt;path id=&quot;Arrow 1&quot; d=&quot;M359 69L349 63.2265L349 74.7735L359 69ZM210 70L350 70L350 68L210 68L210 70Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
    &lt;path id=&quot;Arrow 2&quot; d=&quot;M542 228L547.774 218L536.226 218L542 228ZM543 219L543 162L541 162L541 219L543 219Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
    &lt;path id=&quot;Arrow 6&quot; d=&quot;M634 162L628.226 172L639.774 172L634 162ZM635 228L635 171L633 171L633 228L635 228Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
    &lt;path id=&quot;Arrow 4&quot; d=&quot;M542 371L547.774 361L536.226 361L542 371ZM543 362L543 308L541 308L541 362L543 362Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
    &lt;path id=&quot;Arrow 5&quot; d=&quot;M634 310L628.226 320L639.774 320L634 310ZM635 373L635 319L633 319L633 373L635 373Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
    &lt;text id=&quot;{&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;&#39;Source Code Pro&#39;, monospace&quot; font-size=&quot;128&quot; font-weight=&quot;200&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;371&quot; y=&quot;106.004&quot;&gt;{&lt;/tspan&gt;&lt;/text&gt;
    &lt;text id=&quot;}&quot; fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;&#39;Source Code Pro&#39;, monospace&quot; font-size=&quot;128&quot; font-weight=&quot;200&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;679&quot; y=&quot;106.004&quot;&gt;}&lt;/tspan&gt;&lt;/text&gt;
  &lt;/g&gt;
  &lt;defs&gt;
    &lt;clipPath id=&quot;clip0_7_45&quot;&gt;
    &lt;rect width=&quot;798&quot; height=&quot;463&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/rect&gt;
    &lt;/clipPath&gt;
  &lt;/defs&gt;
&lt;/svg&gt;
&lt;p&gt;Ta svojstva su sada dostupna &lt;code&gt;arr&lt;/code&gt; objektu jer se nalaze u njegovom prototipskom lancu. Primjer metode koju nismo kreirali, ali je JavaScript engine pronasao u &lt;code&gt;[[Prototype]]&lt;/code&gt; i primjenio na novom objektu:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; arr &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;  &lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arr&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;at&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 4&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ispod cemo vidjeti kako JavaScript engine reaguje kada ne moze pronaci metodu u samom objektu, niti u prototipnom lancu objekta. Objekat u ovom slucaju kreiram sa &lt;code&gt;Object&lt;/code&gt; konstruktorom jer on u &lt;code&gt;Object.prototype&lt;/code&gt; nema metodu za nizove.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; obj &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;obj&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;at&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// obj.at is not a function&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ako se vratimo na sliku, strelice od objekta do &lt;code&gt;prototype&lt;/code&gt; svojstva su dvosmjerne jer se ne radi o kopiji vec &lt;code&gt;[[Prototype]]&lt;/code&gt; ima &lt;u&gt;referencu&lt;/u&gt; na &lt;code&gt;prototype&lt;/code&gt; konstruktora.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; arr &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;arr&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;num &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token class-name&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;num&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 3&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arr&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__ &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// true&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Objekat ne cuva metode prototipa. Ono sto on cuva su samo podaci poput stavki niza &lt;code&gt;[1, 2, 3]&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;lanac-predefinisanih-prototipa&quot;&gt;Lanac predefinisanih prototipa&lt;/h3&gt;
&lt;p&gt;Mozda ste primjetili da &lt;code&gt;Array.prototype&lt;/code&gt; objekat na kraju predefinisanih metoda i svojstava ima naveden i &lt;code&gt;[[Prototype]]: Object&lt;/code&gt;. To je zato sto svi oblici &lt;u&gt;ugradjenih prototipa&lt;/u&gt; nasljedjuju prototip obicnog objekta i na ovaj nacin je on poslednji u prototipskom lancu nasljedjivanja.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; arr &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arr&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Array.prototype &lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arr&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Object.prototype &lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arr&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// null &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// ili&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Object.prototype&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// null&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;U ovom slucaju bi JavaScript engine prvo trazio metodu ili svojstvo u samom objektu, potom u &lt;code&gt;Array.prototype&lt;/code&gt;, pa u &lt;code&gt;Object.prototype&lt;/code&gt; i nakon toga dobijamo gresku ukoliko ga ne nadje negdje u lancu.&lt;/p&gt;
&lt;p&gt;Sta se nalazi u &lt;code&gt;Array.__proto__&lt;/code&gt;?&lt;br /&gt;
&lt;code&gt;Array&lt;/code&gt; je konstruktor, a konstruktor je funkcija. Sve funkcije (zajedno sa konstruktorima) za svoj &lt;code&gt;[[Prototype]]&lt;/code&gt; imaju &lt;code&gt;Function.prototype&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;Array&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__ &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// true&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Funkcija je objekat i ona ima referencu na &lt;code&gt;Object.prototype&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;Array&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__ &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// true&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;figure&gt;
  &lt;style&gt;
    @import url(&#39;https://fonts.googleapis.com/css2?family=Source+Code+Pro:wght@200;400&amp;display=swap&#39;);
  &lt;/style&gt;
&lt;svg style=&quot;width: 100%&quot; viewBox=&quot;79 5 630 370&quot; fill=&quot;none&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
&lt;rect x=&quot;318&quot; y=&quot;8&quot; width=&quot;162&quot; height=&quot;38&quot; stroke=&quot;var(--text-color)&quot; stroke-width=&quot;2&quot;&gt;&lt;/rect&gt;
&lt;rect x=&quot;257&quot; y=&quot;118&quot; width=&quot;283&quot; height=&quot;38&quot; stroke=&quot;var(--text-color)&quot; stroke-width=&quot;2&quot;&gt;&lt;/rect&gt;
&lt;rect x=&quot;127&quot; y=&quot;223&quot; width=&quot;543&quot; height=&quot;38&quot; stroke=&quot;var(--text-color)&quot; stroke-width=&quot;2&quot;&gt;&lt;/rect&gt;
&lt;rect x=&quot;92&quot; y=&quot;333&quot; width=&quot;136&quot; height=&quot;38&quot; stroke=&quot;var(--text-color)&quot; stroke-width=&quot;2&quot;&gt;&lt;/rect&gt;
&lt;rect x=&quot;251&quot; y=&quot;333&quot; width=&quot;136&quot; height=&quot;38&quot; stroke=&quot;var(--text-color)&quot; stroke-width=&quot;2&quot;&gt;&lt;/rect&gt;
&lt;rect x=&quot;410&quot; y=&quot;333&quot; width=&quot;136&quot; height=&quot;38&quot; stroke=&quot;var(--text-color)&quot; stroke-width=&quot;2&quot;&gt;&lt;/rect&gt;
&lt;rect x=&quot;569&quot; y=&quot;333&quot; width=&quot;136&quot; height=&quot;38&quot; stroke=&quot;var(--text-color)&quot; stroke-width=&quot;2&quot;&gt;&lt;/rect&gt;
&lt;text fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.1em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;302.562&quot; y=&quot;144.11&quot;&gt;Object.prototype&lt;/tspan&gt;&lt;/text&gt;
&lt;text fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.1em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;375.016&quot; y=&quot;34.11&quot;&gt;null&lt;/tspan&gt;&lt;/text&gt;
&lt;text fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.1em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;194.633&quot; y=&quot;249.11&quot;&gt;odgovarajuci Konstruktor.prototype&lt;/tspan&gt;&lt;/text&gt;
&lt;text fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.1em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;124.023&quot; y=&quot;359.11&quot;&gt;&amp;#x192; fn()&lt;/tspan&gt;&lt;/text&gt;
&lt;text fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.1em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;307.008&quot; y=&quot;359.11&quot;&gt;{}&lt;/tspan&gt;&lt;/text&gt;
&lt;text fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.1em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;466.008&quot; y=&quot;359.11&quot;&gt;[]&lt;/tspan&gt;&lt;/text&gt;
&lt;text fill=&quot;var(--text-color)&quot; xml:space=&quot;preserve&quot; style=&quot;white-space: pre&quot; font-family=&quot;Source Code Pro&quot; font-size=&quot;1.1em&quot; letter-spacing=&quot;0em&quot;&gt;&lt;tspan x=&quot;589.031&quot; y=&quot;359.11&quot;&gt;&amp;#x2018;string&amp;#x2019;&lt;/tspan&gt;&lt;/text&gt;
&lt;path d=&quot;M611 277L615.476 287.644L622.456 278.446L611 277ZM664.18 316.101L618.774 281.644L617.565 283.237L662.971 317.694L664.18 316.101Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M452 277L456.476 287.644L463.456 278.446L452 277ZM505.18 316.101L459.774 281.644L458.565 283.237L503.971 317.694L505.18 316.101Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M345.576 277L341.1 287.644L334.12 278.446L345.576 277ZM292.395 316.101L337.802 281.644L339.011 283.237L293.605 317.694L292.395 316.101Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M186.576 277L182.1 287.644L175.12 278.446L186.576 277ZM133.395 316.101L178.802 281.644L180.011 283.237L134.605 317.694L133.395 316.101Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M399 173L393.226 183L404.774 183L399 173ZM400 206L400 182L398 182L398 206L400 206Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M399 65L393.226 75L404.774 75L399 65ZM400 98L400 74L398 74L398 98L400 98Z&quot; fill=&quot;var(--text-color)&quot;&gt;&lt;/path&gt;
&lt;rect x=&quot;0.5&quot; y=&quot;0.5&quot; width=&quot;797&quot; height=&quot;381&quot; stroke=&quot;var(--text-color)&quot;&gt;&lt;/rect&gt;
&lt;/svg&gt;
&lt;/figure&gt;
&lt;p&gt;Sada kada znamo kako pristupiti globalnim prototipima, napomenucu da treba izbjegavati mijenjanje izvornih prototipa da bi izbjegli konflikte usljed imenovanja. Medjutim, modifikacija metoda prototipa moze biti korisna za polifilovanje (kreiranje zamjenske metode koja postoji u JavaScript specifikaciji u pretrazivacu koji je jos nije implementirao).&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;join&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token class-name&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;join&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;kreiranje-naseg-prototipskog-nasljedjivanja&quot;&gt;Kreiranje naseg prototipskog nasljedjivanja&lt;/h3&gt;
&lt;p&gt;Recimo da imamo konstruktor &lt;em&gt;Oblik&lt;/em&gt;, ali ga zelimo prosiriti i iz njega izvesti nekoliko novih konstruktora raznih oblika:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Oblik&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token class-name&quot;&gt;Oblik&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;oboji&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Kocka&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token class-name&quot;&gt;Kocka&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Oblik&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Sada je property svojstvo Kocka = Oblik.prototype&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// i oboji() metoda ce biti dostupna svim objektima Kocke&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token class-name&quot;&gt;Kocka&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;izracunajDimenzije&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; kocka &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Kocka&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Medjutim postoje ne tako ceste situacije kada zelimo novi objekat kreirati dinamicno, kada nam tip objekta nije unaprijed poznat ili zelimo kreirati objekat nekog tipa koji ce biti odredjen za vrijeme izvrsavanja koda. Tada &lt;code&gt;new Kocka()&lt;/code&gt; nije opcija. &lt;code&gt;constructor&lt;/code&gt; svojstvo u prototipu nam omogucuje da kreiramo novi objekat tako sto cemo koristiti postojeci objekat: &lt;code&gt;new kocka.constructor()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Ali postoji mali problem ako dopisemo sledece&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// ...&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; kocka &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Kocka&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; kockica &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;kocka&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;kockica&lt;/code&gt; ne nasljedjuje Kocku, vec Oblik. Zasto?&lt;br /&gt;
Stvar je u tome kako smo izvrsili nasljedjivanje.&lt;br /&gt;
&lt;code&gt;Kocka.prototype = Object.create(Oblik.prototype)&lt;/code&gt; linija koda je potpuno zamjenila sva prethodna svojstva koja su zivjela u &lt;code&gt;prototype&lt;/code&gt;-u Kocke, a predefinisani su bili &lt;code&gt;constructor&lt;/code&gt; i &lt;code&gt;[[Prototype]]&lt;/code&gt;. Prvo &lt;code&gt;constructor&lt;/code&gt; svojstvo u lancu ce biti ono od konstruktora &lt;code&gt;Oblik&lt;/code&gt; i na njemu ce kljucna rijec &lt;code&gt;new&lt;/code&gt; kreirati novi objekat. Ispod je vrijednost &lt;code&gt;kocka&lt;/code&gt; objekta u konzoli &lt;code&gt;console.log(kocka)&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;basic-pre&quot;&gt;
×  Kocka {}
    × [[Prototype]]: Oblik
       ~ nedostaje: constructor: ƒ Kocka()~
       &gt; izracunajDimenzije: ƒ ()
       × [[Prototype]]: Object
          &gt; oboji: ƒ ()
          &gt; constructor: ƒ Oblik() 
          &gt; [[Prototype]]: Object
&lt;/pre&gt;
&lt;p&gt;Zato je dobra praksa resetovati konstruktor svojstvo nakon nasljedjivanja druge konstruktor funkcije, ovako:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token class-name&quot;&gt;Kocka&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Oblik&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Ispod resetujemo konstruktor i dodajemo metode&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// koje pripadaju Kocka prototipu&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token class-name&quot;&gt;Kocka&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;constructor &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Kocka&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token class-name&quot;&gt;Kocka&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;izracunajDimenzije&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sada ce pozivanje &lt;code&gt;new kocka.constructor()&lt;/code&gt; kreirati objekat konstruktorom &lt;code&gt;Kocka&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Mozemo napisati funkciju koja ce nas spasiti ponavljanja istih linija koda kada god zelimo prosiriti neki konstruktor:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;extend&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;Child&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Parent&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token class-name&quot;&gt;Child&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Parent&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token class-name&quot;&gt;Child&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;constructor &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Child&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;extend&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Kocka&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Oblik&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;pozivanje-roditeljskog-konstruktora&quot;&gt;Pozivanje roditeljskog konstruktora&lt;/h3&gt;
&lt;p&gt;S obzirom da na objekat uticu nasljedjeni prototipi, trebalo bi da naslijedi i clanove, ali se to u ovom slucaju ne desava automatski. Pozvacemo roditeljsku funkciju sa &lt;code&gt;Oblik.call(this, argument)&lt;/code&gt; da bi bila svjesna objekta na kom treba dodati clanove.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Oblik&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;boja&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;	&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;boja &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; boja&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Kocka&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;stranicaA&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; boja&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;	&lt;span class=&quot;token function&quot;&gt;Oblik&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;call&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; boja&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;	&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;stranicaA &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; stranicaA&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token class-name&quot;&gt;Kocka&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Oblik&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token class-name&quot;&gt;Kocka&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;constructor &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Kocka&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; kocka &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Kocka&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;crvena&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// kocka = { stranicaA: 50, boja: crvena }&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;.call()&lt;/code&gt; metoda poziva funkciju sa datom &lt;code&gt;this&lt;/code&gt; vrijednosti i argumentima. Proslijedili smo joj novi objekat kao &lt;code&gt;this&lt;/code&gt;. Da smo pozvali funkciju sa &lt;code&gt;Oblik(boja)&lt;/code&gt;, &lt;code&gt;this&lt;/code&gt; bi u funkciji pokazivao na globalni objekat  (&lt;code&gt;window&lt;/code&gt; u pretrazivacu), sto znaci da bi svojstvo boje bilo dodjeljeno globalnom objektu: &lt;code&gt;window.boja = &#39;crvena&#39;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Sintaksa: &lt;code&gt;fn.call(thisObj, arg, /*...,*/, argN)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Ali, ako ne zelimo dodavati clanove nekih klasa direktno u objekat, vec u prototip, tada prototipu mozemo dodjeliti novu instancu &lt;em&gt;Oblik&lt;/em&gt; konstruktor &lt;code&gt;Kocka.prototype = new Oblik();&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Oblik&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;	&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;boja &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;crna&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token class-name&quot;&gt;Oblik&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;nacrtaj&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;	console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;boja &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39; &#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;constructor&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Kocka&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;stranicaA&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;	&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;stranicaA &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; stranicaA&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token class-name&quot;&gt;Kocka&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Oblik&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// ***&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token class-name&quot;&gt;Kocka&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;constructor &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Kocka&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; kocka &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Kocka&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;kocka&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;nacrtaj&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// crna kocka&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;U konzoli &lt;code&gt;kocka&lt;/code&gt; izgleda ovako:&lt;/p&gt;
&lt;pre class=&quot;basic-pre&quot;&gt;
×  Kocka {}
      stranicaA: 50
    × [[Prototype]]: Oblik
         boja: &quot;crna&quot;
       &gt; constructor: ƒ Kocka(stranicaA)
       × [[Prototype]]: Object
          &gt; nacrtaj: ƒ ()
          &gt; constructor: ƒ Oblik() 
          &gt; [[Prototype]]: Object
&lt;/pre&gt;
&lt;h3 id=&quot;rekreiranje-new-operatora&quot;&gt;Rekreiranje &lt;code&gt;new&lt;/code&gt; operatora&lt;/h3&gt;
&lt;p&gt;Da bi bolje razumjeli kako &lt;code&gt;new&lt;/code&gt; radi, pravicemo se da ne postoji i rekreirati njegove korake. Pravimo funkciju koja:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;kreira prazan objekat na koji &lt;code&gt;this&lt;/code&gt; pokazuje&lt;/li&gt;
&lt;li&gt;novom objektu definise &lt;code&gt;[[Prototype]]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;nastanjuje novi objekat svojstvima &lt;code&gt;this.property = value&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;vraca novi objekat&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// konstruktor&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;  &lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; name&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token class-name&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;talk&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;My name is &#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Funkcija imitira new&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;newF&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;constructor&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;args&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; obj &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;  Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setPrototypeOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;obj&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; constructor&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;apply&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;obj&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; args&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; obj&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; person1 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;newF&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Person&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Ike&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// person1 = { name: &#39;Ike&#39;, __proto__: Person.prototype }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; person2 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Vana&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// person1 = { name: &#39;Vana&#39;, __proto__: Person.prototype }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;person1&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;talk&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// My name is Ike&lt;/span&gt;&lt;br /&gt;person2&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;talk&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// My name is Vana&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;posudjivanje-metode-od-prototipa%3A&quot;&gt;Posudjivanje metode od prototipa:&lt;/h3&gt;
&lt;p&gt;Ispod zelimo metodu niza &lt;code&gt;.join()&lt;/code&gt; primjeniti na objekat koji nije niz.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;person&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arguments&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39; &#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// arguments.join is not a function&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arguments&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__ &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// true&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;person&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Ike&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Barlowe&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;arguments&lt;/code&gt; objekat sam po sebi je samo array-like, sto znaci da nije pravi niz (array) vec lici na njega jer ima indekse i &lt;code&gt;length&lt;/code&gt; svojstvo. Po kreiranju za &lt;code&gt;[[Prototype]]&lt;/code&gt; nasljedjuje &lt;code&gt;Object.prototype&lt;/code&gt; i u svom prototipskom lancu nema metode koje rade sa nizovima.&lt;/p&gt;
&lt;p&gt;Iz ovog razloga &lt;code&gt;arguments.join(&#39; &#39;)&lt;/code&gt; izaziva gresku &lt;code&gt;arguments.join is not a function&lt;/code&gt;. Medjutim, vecini metoda iz &lt;code&gt;Array.prototype&lt;/code&gt; su samo potrebne vrijednosti sa indexima i svojstvo &lt;code&gt;length&lt;/code&gt;, ne i da se radi o pravim nizovima. Problem je u tome sto &lt;code&gt;arguments&lt;/code&gt; objekat nije kreiran kao niz i za prototip nije naslijedio &lt;code&gt;Array.prototype&lt;/code&gt; od konstruktora. Prema tome je dovoljno da &lt;code&gt;arguments&lt;/code&gt; objektu &lt;code&gt;join()&lt;/code&gt; metodu ucinimo dostupnom.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token function&quot;&gt;person&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Ike&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Barlowe&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;person&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  arguments&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__proto__ &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// Arguments [[Prototype]] sada pokazuje na Array.prototype&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arguments&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39; &#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Ike Barlowe&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;dir&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arguments&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ispis &lt;code&gt;arguments&lt;/code&gt; objekta u konzoli:&lt;/p&gt;
&lt;pre class=&quot;basic-pre&quot;&gt;
× Arguments(2)
    0: &quot;Ike&quot;
    1: &quot;Barlowe&quot;
  &gt; callee: ƒ person()
    length: 2
  &gt; Symbol(Symbol.iterator): ƒ values()
  × [[Prototype]]: Array(0)
     &gt; at: ƒ at()
     &gt; concat: ƒ concat()
       ...
&lt;/pre&gt;
&lt;p&gt;Umjesto modifikovanja prototipa objekta, moguce je samo uvesti potrebnu metodu u objekat.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;person&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  arguments&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;join &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;join&lt;br /&gt;  &lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;basic-pre&quot;&gt;
× Arguments(2)
    0: &quot;Ike&quot;
    1: &quot;Barlowe&quot;
  &gt; join: ƒ join()
  &gt; callee: ƒ person()
    length: 2
  &gt; Symbol(Symbol.iterator): ƒ values()
  × [[Prototype]]: Object
     &gt; constructor: ƒ Object()
     &gt; hasOwnProperty: ƒ hasOwnProperty()
       ...
&lt;/pre&gt;
&lt;p&gt;Prototip je i dalje ostao &lt;code&gt;Object.prototype&lt;/code&gt;, a &lt;code&gt;join()&lt;/code&gt; metoda radi.&lt;/p&gt;
&lt;h3 id=&quot;izracunata-imena-svojstava&quot;&gt;Izracunata imena svojstava&lt;/h3&gt;
&lt;p&gt;U ovakvim funkcijama mozemo primjeniti jednu od super moci uglastih zagrada &lt;code&gt;[]&lt;/code&gt;. One pruzaju opciju da definisemo ime svojstva racunanjem (nije ograniceno na klase i konstruktore, isto se moze uraditi direktno u objektu).&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Konstruktor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;key&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Korisnikovo &#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; key&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; value&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; obj &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Konstruktor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Ime&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Nina&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;obj&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// {Korisnokovo Ime: &#39;Nina&#39;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;gubljenje-this-i-funkcija-strelice&quot;&gt;Gubljenje &lt;code&gt;this&lt;/code&gt; i funkcija strelice&lt;/h3&gt;
&lt;p&gt;Jos jedan trik koji se moze izvesti u konstruktorima, klasama, ali ne i direktno u objektima.&lt;/p&gt;
&lt;p&gt;Ukoliko neku metodu dodjelimo varijabli ona postaje nezavisna od objekta, zaboravlja na njegova ostala svojstva i &lt;code&gt;this&lt;/code&gt; se gubi prilikom pozivanja takve funkcije. Ovo se cesto dogadja kada metodu proslijedimo funkciji kao argument.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Konstruktor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;fraza&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fraza &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; fraza&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;ispisiFrazu&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Nova fraza: &#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fraza&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; obj &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Konstruktor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Dobar dan.&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; metoda &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; obj&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ispisiFrazu&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;metoda&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Nova fraza: undefined&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pored poznatih rjesenja poput omotavanja metode u funkciju, koristenja &lt;code&gt;bind&lt;/code&gt; metode, mozemo koristiti funciju strelice (arrow function &lt;code&gt;() =&amp;gt; {}&lt;/code&gt;).&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// Omotavanje metode u funkciju.&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;metoda&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  obj&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ispisiFrazu&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;metoda&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Dobar dan&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Bind metoda.&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; metoda &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; obj&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ispisiFrazu&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;bind&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;obj&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;metoda&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Dobar dan&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Definisanje metode sa funkcijom strelice:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Konstruktor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;fraza&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fraza &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; fraza&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;ispisiFrazu&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Nova fraza: &#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fraza&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; obj &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Konstruktor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Dobar dan.&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; metoda &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; obj&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ispisiFrazu&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;metoda&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Nova fraza: Dobar dan&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ovo radi jer je vrijednost &lt;code&gt;this&lt;/code&gt; u funkciji strelice odredjena na osnovu vanjskog leksickog opsega. Funkcija strelice nema svoj &lt;code&gt;this&lt;/code&gt; kao obicna funkcija. Ovaj isti trik ne radi u objektima zbog leksickog opsega za &lt;code&gt;this&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; obj &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;fraza&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Dobar dan&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function-variable function&quot;&gt;ispisiFrazu&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Nova fraza: &#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fraza&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; metoda &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; obj&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ispisiFrazu&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;metoda&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Nova fraza: undefined&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Buduci da objekat ne stvara novi leksicki opseg, funkcija strelice ce traziti vrijednost za &lt;code&gt;this&lt;/code&gt; izvan objekta.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; obj &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;vrijednostThis&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;obj&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// {vrijednostThis: Window}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;this&lt;/code&gt; pokazuje na &lt;code&gt;Window&lt;/code&gt; globalni objekat u kom ne postoji svojstvo &lt;code&gt;fraza&lt;/code&gt; i za rezultat JavaScript engine vraca vrijednost &lt;code&gt;undefined&lt;/code&gt;.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Quokka za debagovanje JavaScript-a</title>
    <link href="https://webdevlpr.com/posts/quokka-za-debagovanje-JavaScript-a/"/>
    <id>https://webdevlpr.com/posts/quokka-za-debagovanje-JavaScript-a/</id>
    <updated>2022-11-02T17:00:00Z</updated>
    <summary>Quokka.js je alat za produktivnost i brz pregled rezultata koda (JavaScript-a i TypeScript-a). Vrijednosti se azuriraju u realnom vremenu, paralelno sa pisanjem koda i prikazuju unutar integrisanog radnog okruzenja.</summary>
    <content type="html">&lt;p&gt;Vjerovatno kasnim na zurku, ali za one koji ne znaju:&lt;/p&gt;
&lt;figure&gt;
&lt;img loading=&quot;lazy&quot; src=&quot;https://webdevlpr.com/static/img/quokkajs.jpg&quot; alt=&quot;Funkcije su objekti u JavaScript-u.&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;b&gt;Quokka.js&lt;/b&gt; je alat za produktivnost i brz pregled rezultata koda (JavaScript-a i TypeScript-a). Vrijednosti se azuriraju u realnom vremenu, paralelno sa pisanjem koda i prikazuju unutar integrisanog radnog okruzenja (engl. Integrated development environment, IDE).&lt;/p&gt;
&lt;p class=&quot;tip&quot;&gt;Ekstenzija je dostupna za VS Code, JetBrains i Sublime Text.&lt;/p&gt;
&lt;p&gt;Umjesto podesavanja automatizovanog testiranja za svaku napisanu liniju koda, &lt;i&gt;nekada&lt;/i&gt; je prakticnije rezultat provuci kroz &lt;code&gt;console.log&lt;/code&gt; (iako ni to nije idealno rjesenje jer zahtjeva dodatne korake). Svrha Quokka.js ekstenzije je da smanji otpor i oslobodi vrijeme za fokus na pisanje koda, ucenje, istrazivanje, testiranje ideja i novih funkcija.&lt;/p&gt;
&lt;figure&gt; 
  &lt;video loop=&quot;&quot; controls=&quot;&quot; autoplay=&quot;&quot;&gt;
    &lt;source src=&quot;https://webdevlpr.com/static/img/Quokka.mp4&quot; loading=&quot;lazy&quot; type=&quot;video/mp4&quot; alt=&quot;Quokka. Kod se pokrece u toku kucanja. Greske su prikazane pored koda koji ih uzrokuje.&quot; /&gt;
  &lt;/video&gt;
  &lt;figcaption&gt;Kod se izvrsava u toku kucanja, a greske se prikazuju pored koda koji ih uzrokuje.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Indikatori sa lijeve strane numerisanih linija su uvijek azurirane u realnom vremenu i odnose se na izvrsavanje koda. Crvena ukazuje na gresku, zelena na izvrsen kod, zuta na djelimicno izvrsen i siva na neizvrsen kod.&lt;/p&gt;
&lt;figure&gt;
  &lt;img src=&quot;https://webdevlpr.com/static/img/quokkajs-coverage-indicators.png&quot; loading=&quot;lazy&quot; alt=&quot;Boje sa lijeve strane koda su indikatori pokrivenosti i izvrsenja koda.&quot; style=&quot;max-width: 747px&quot; /&gt; 
  &lt;figcaption&gt;Boje sa lijeve strane koda su indikatori pokrivenosti i izvrsenja koda.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Sve opcije ekstenzije se mogu istraziti ispod, ali su neke u sklopu komercijalne &amp;quot;PRO&amp;quot; verzije sa jos naprednih funkcija. Besplatna verzija je dovoljno dobra da mi bude zao jer nisam ranije otkrila ekstenziju.&lt;/p&gt;
&lt;iframe src=&quot;https://quokkajs.com/pro/&quot; loading=&quot;lazy&quot; style=&quot;width: 100%; min-height: 600px&quot;&gt;&lt;/iframe&gt;</content>
  </entry>
  
  <entry>
    <title>Funkcije su objekti</title>
    <link href="https://webdevlpr.com/posts/funkcije-su-objekti/"/>
    <id>https://webdevlpr.com/posts/funkcije-su-objekti/</id>
    <updated>2022-10-25T17:00:00Z</updated>
    <summary>Vrijednosti u JavaScript-u su uvijek odredjenog tipa. Postoji osam osnovnih tipova podataka, a funkcije su prvoklasni objekti.</summary>
    <content type="html">&lt;figure&gt;
&lt;img style=&quot;max-height: 300px; object-fit: cover&quot; src=&quot;https://webdevlpr.com/static/img/funkcije-su-objekti.jpg&quot; alt=&quot;Funkcije su objekti u JavaScript-u.&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;Postoji osam osnovnih tipova podataka u JavaScript-u. Sedam od njih su primitivni tipovi podataka (poput brojeva, teksta itd.) i osmi je neprimitivni tip — objekat, a &lt;em&gt;funkcije su prvoklasni objekti&lt;/em&gt; koji se mogu pozvati sa zagradama &lt;code&gt;()&lt;/code&gt; kako bi izvrsili naredbu / akciju. Drugim rijecima, moguce je raditi sa funkcijama kao sa objektima.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sayHi&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Greetings&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;sayHi&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Greetings&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;typeof&lt;/span&gt; sayHi&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// function&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;sayHi &lt;span class=&quot;token keyword&quot;&gt;instanceof&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// true&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;svojstva-objekta&quot;&gt;Svojstva objekta&lt;/h2&gt;
&lt;p&gt;Funkcija moze biti korisna sama po sebi i nositi bezbroj dodatnih funkcionalnosti u svojstvima.&lt;/p&gt;
&lt;p&gt;Jedna od osobina koju funkcije dijele sa objektima su svojstva (&lt;code&gt;key: value&lt;/code&gt; parovi i metode) koje im se mogu kreirati, modifikovati i brisati. Za one koji nisu upoznati sa ovim tipom podatka, ispod je definisan objekat sa jednim &lt;code&gt;key: value&lt;/code&gt; parom, da bi izvan objekta pristupili tom svojstvu i izmjenili njegovu vrijednost.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; sum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;current&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;sum&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;current &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// modifikuje vrijednost&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A ovako izgleda funkcija &lt;code&gt;sum()&lt;/code&gt; kojoj smo dodijelili isto svojstvo koristeci tacku &lt;code&gt;sum.current&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sum&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; b&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  sum&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;current &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// sum.current nije varijabla&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;sum&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;current &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// definisano svojstvo objekta funkcije&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;sum&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;dir&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;sum&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// prikazuje svojstva objekta&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Rezultat koda u konzoli:&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/console-dir-function-object.png&quot; alt=&quot;Rezultat koda u konzoli.&quot; style=&quot;max-width: 357px&quot; /&gt; 
 &lt;figcaption&gt;Prikaz &lt;code&gt;sum()&lt;/code&gt; svojstava.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Kako je ona poseban tip objekta, dodijeljena su joj neka korisna svojstva koji drugi tipovi objekata nemaju. U konzoli su prikazani sa tamnijim slovima (&lt;code&gt;arguments&lt;/code&gt;, &lt;code&gt;caller&lt;/code&gt;, &lt;code&gt;length&lt;/code&gt;, &lt;code&gt;name&lt;/code&gt; itd.). &lt;code&gt;Current&lt;/code&gt; svojstvo nije doslo sa funkcijom, definisano je u kodu.&lt;/p&gt;
&lt;h3 id=&quot;duzina-parametara-funkcije&quot;&gt;Duzina parametara funkcije&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;length&lt;/code&gt; svojstvo se odnosi na definisan broj parametara koje funkcija prihvata:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; b&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;add&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 2&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;kontekstualno-ime&quot;&gt;Kontekstualno ime&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Name&lt;/code&gt; svojstvo, kako ocekujemo, daje pristup imenu funkcije.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; b&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;add&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// add&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cak i kada se radi o varijabli kojoj je po kreiranju dodjeljena funkcija bez imena, svojstvo &lt;code&gt;name&lt;/code&gt; ce zakljuciti ime iz konteksta.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;add&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; b&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;add&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// add&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Koje ime ce imati izraz funkcije (function expression) ako varijabli dodijelimo funkciju sa imenom?&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;add&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;calculate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; b&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;add&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// calculate&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ili ako funkcija nije dodijeljena varijabli i nema ime?&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; func &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;func&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// *crickets chirping*&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;dir&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;func&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// ƒ anonymous()&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// arguments: null&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// caller: null&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// length: 0&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// name: &quot;&quot;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// prototype: {constructor: ƒ}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Prioritet uvijek ima ime deklarisano nakon kljucne rijeci &lt;code&gt;function&lt;/code&gt;, a ako ga uopste nema - onda se radi o anonimnoj funkciji sa &lt;code&gt;name: &amp;quot;&amp;quot;&lt;/code&gt; (vrijednost je prazan string).&lt;/p&gt;
&lt;h4 id=&quot;imenovani-funkcijski-izrazi&quot;&gt;Imenovani funkcijski izrazi&lt;/h4&gt;
&lt;p&gt;Deklaracija funkcije (function declaration) uvijek pocinje sa &lt;code&gt;function imeFunkcije() {...}&lt;/code&gt;, dok izraz funkcije (function expression) omogucava kreiranje nove funkcije unutar bilo kog izraza.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// ...&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ovo je jedan primjer izraza funkcije jer se kreiranje funkcije desava u sklopu izraza — kroz dodjeljivanje anonimne funkcije varijabli. Izrazi zavrsavaju sa &lt;code&gt;;&lt;/code&gt; da bi kompajler razlikovao i odvojio izraze. Funkcija nema ime i &lt;code&gt;name&lt;/code&gt; svojstvo ove funkcije je izvuceno iz konteksta (varijable &lt;code&gt;func&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Da bi kreirali imenovani funkcijski izraz (Named Function Expression), varijabli &lt;code&gt;func&lt;/code&gt; treba dodijeliti imenovanu funkciju:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// ..&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;func&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// read&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Kljucna stvar kod ovakve funkcije je da ona rezervise &lt;code&gt;read&lt;/code&gt; identifikator za &lt;em&gt;unutrasnji opseg&lt;/em&gt; i predstavlja &lt;em&gt;pouzdan nacin za pozivanje sebe&lt;/em&gt;. Pouzdan je jer se taj identifikator ne moze izmjeniti nakon kreiranja funkcije, cak i ako se promijeni ime varijable. Ali &lt;code&gt;read&lt;/code&gt; identifikator je pogodan za interno pozivanje sebe jer nije dostupan izvan funkcije, dok je &lt;code&gt;func&lt;/code&gt; ime varijable dostupno unutar i izvan funkcije i njeno ime se moze izmjeniti.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;quote&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;quote&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;quote&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token function&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Lorem ipsum dolor sit amet.&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token comment&quot;&gt;// poziva sebe sa argumentom&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Lorem ipsum...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Uncaught ReferenceError: read is not defined&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;metode-funkcije&quot;&gt;Metode funkcije&lt;/h3&gt;
&lt;p&gt;Kao i objekti, funkcije mogu imati metode, a neke su predefinisane (&lt;code&gt;console.dir(add)&lt;/code&gt;):&lt;/p&gt;
&lt;pre class=&quot;basic-pre&quot;&gt;
  ƒ add(a, b)
  arguments: null
  caller: null
  length: 2
  name: &quot;add&quot;
  [[Prototype]]: ƒ ()
    bind: ƒ bind()
    toString: ƒ toString()
    Symbol(Symbol.hasInstance): ƒ [Symbol.hasInstance]()
    get arguments: ƒ ()
    ...
&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;func.toString()&lt;/code&gt; u konzoli vraca tijelo funkcije kao string.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/toString.png&quot; alt=&quot;Metoda toString() primjenjena na funkciji u konzoli.&quot; style=&quot;max-width: 606px&quot; /&gt; 
 &lt;figcaption&gt;Metoda &lt;code&gt;toString()&lt;/code&gt; primjenjena na funkciji u konzoli.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Mnoge JavaScript biblioteke koriste ovu osobinu funkcija. jQuery biblioteka ima glavnu funkciju &lt;code&gt;$&lt;/code&gt; i ostale pomocne funkcije koje se vezu za nju. Na ovaj nacin se izbjegava preopterecenje globalnog prostora i konflikti imenovanja varijabli i funkcija.&lt;/p&gt;
&lt;h2 id=&quot;prosljedjivanje-po-referenci&quot;&gt;Prosljedjivanje po referenci&lt;/h2&gt;
&lt;p&gt;One se prosljedjuju po referenci (&lt;i&gt;pass by reference&lt;/i&gt;) kao i drugi objekti (&lt;code&gt;array&lt;/code&gt; i &lt;code&gt;object&lt;/code&gt;), dok se primitivni tipovi podataka (svi ostali) prosljedjuju po vrijednosti. &lt;a target=&quot;_blank&quot; href=&quot;https://webdevlpr.com/posts/proslijediti-po-referenci-ili-vrijednosti/&quot;&gt;Ovdje&lt;/a&gt; je detaljnije objasnjeno sta to znaci i kako se razlikuju.&lt;/p&gt;
&lt;p&gt;U sustini, kada varijabli dodijelimo funkciju, ona ne dobija kopiju funkcije, vec referencu koja pokazuje na mjesto u memoriji gdje se ona nalazi. Tako dvije varijable imaju razlicita imena iako pristupaju istoj funkciji.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;book&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// ...&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; book2 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; book&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;book&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;author &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Ana&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;book&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;author&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Ana&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;book2&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;author&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Ana&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;book2&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;author &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Vana&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;book&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;author&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Vana&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;book2&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;author&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Vana&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Funkcije se mogu prosljedjivati kao argumenti drugim funkcijama. I u ovom slucaju argumenti su referenca na funkciju, ne njena kopija.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;calculate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;callback&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; x&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; y&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;callback&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; y&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;result&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;x&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; y&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; x &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; y&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;multiply&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;x&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; y&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; x &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; y&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;calculate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;add&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;      &lt;span class=&quot;token comment&quot;&gt;// =&gt; 5&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;calculate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;multiply&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// =&gt; 6&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  
  <entry>
    <title>Proslijediti po referenci ili vrijednosti</title>
    <link href="https://webdevlpr.com/posts/proslijediti-po-referenci-ili-vrijednosti/"/>
    <id>https://webdevlpr.com/posts/proslijediti-po-referenci-ili-vrijednosti/</id>
    <updated>2022-10-21T17:00:00Z</updated>
    <summary>U ovom clanklu cemo objasniti kako JavaScript proslijedi po referenci ili vrijednosti i koja je razlika izmedju njih.</summary>
    <content type="html">&lt;figure&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/proslijedjivanje-po-referenci-ili-vrijednosti.png&quot; alt=&quot;Funkcije su objekti u JavaScript-u.&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;Vrijednosti u JavaScript-u su uvijek odredjenog tipa. Primitivni tip podataka su najsonovniji oblici vrijednosti (&lt;code&gt;string&lt;/code&gt;, &lt;code&gt;number&lt;/code&gt;, &lt;code&gt;bigint&lt;/code&gt;, &lt;code&gt;boolean&lt;/code&gt;, &lt;code&gt;null&lt;/code&gt;, &lt;code&gt;undefined&lt;/code&gt;, &lt;code&gt;symbol&lt;/code&gt;) i oni se proslijede po vrijednosti / kopira se podatak.&lt;br /&gt;
Sa druge strane, svi objekti (kao obicni objekti, nizovi i funkcije) se proslijede po referenci / ne radi se o kopiji.&lt;/p&gt;
&lt;p&gt;Sta to znaci?&lt;br /&gt;
Primitivni podaci se prosljedjuju po vrijednosti jer varijabla sadrzi sam podatak (kao broj ili tekst), dok se objekti prosljedjuju po referenci jer varijabla u sebi drzi referencu / adresu na kojoj se podatak nalazi.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; b &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// prosljedjivanje vrijednosti&lt;/span&gt;&lt;br /&gt;b &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; b &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// b = 15; a = 7;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; c &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token literal-property property&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Jane&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// kreiranje objekta&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; d &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// prosljedjivanje po referenci&lt;/span&gt;&lt;br /&gt;d&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;lastName &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Doe&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// objekat dobija novo svojstvo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// {name: &#39;Jane&#39;, lastName: &#39;Doe&#39;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;style type=&quot;text/css&quot;&gt;
  .tg  {border-collapse:collapse;border-spacing:0;}
  .tg td{border-color:var(--text-color);border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
    overflow:hidden;padding:10px 10px;word-break:normal;}
  .tg th{border-color:var(--text-color);border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
    font-weight:normal;overflow:hidden;padding:10px 10px;word-break:normal;}
  tr th {text-align:left;vertical-align:top}
&lt;/style&gt;
&lt;table class=&quot;tg&quot;&gt;
&lt;thead&gt;
  &lt;tr&gt;
    &lt;th class=&quot;tg-0lax&quot;&gt;Varijabla&lt;/th&gt;
    &lt;th class=&quot;tg-0lax&quot;&gt;Vrijednost&lt;/th&gt;
    &lt;th class=&quot;tg-0lax&quot;&gt;&lt;/th&gt;
    &lt;th class=&quot;tg-0pky&quot;&gt;Adresa&lt;/th&gt;
    &lt;th class=&quot;tg-0pky&quot;&gt;Vrijednost&lt;/th&gt;
  &lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
  &lt;tr&gt;
    &lt;td class=&quot;tg-tf2e&quot;&gt;a&lt;/td&gt;
    &lt;td class=&quot;tg-tf2e&quot;&gt;7&lt;/td&gt;
    &lt;td class=&quot;tg-tf2e&quot;&gt;/&lt;/td&gt;
    &lt;td class=&quot;tg-pcvp&quot;&gt;0x01&lt;/td&gt;
    &lt;td class=&quot;tg-pcvp&quot;&gt;{name: &#39;Jane&#39;, lastName: &#39;Doe&#39;}&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td class=&quot;tg-0lax&quot;&gt;b&lt;/td&gt;
    &lt;td class=&quot;tg-0lax&quot;&gt;15&lt;/td&gt;
    &lt;td class=&quot;tg-0lax&quot;&gt;/&lt;/td&gt;
    &lt;td class=&quot;tg-0lax&quot;&gt;&lt;/td&gt;
    &lt;td class=&quot;tg-0lax&quot;&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td class=&quot;tg-tf2e&quot;&gt;c&lt;/td&gt;
    &lt;td class=&quot;tg-tf2e&quot;&gt;0x01&lt;/td&gt;
    &lt;td class=&quot;tg-tf2e&quot;&gt;/&lt;/td&gt;
    &lt;td class=&quot;tg-tf2e&quot;&gt;&lt;/td&gt;
    &lt;td class=&quot;tg-tf2e&quot;&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td class=&quot;tg-0lax&quot;&gt;d&lt;/td&gt;
    &lt;td class=&quot;tg-0lax&quot;&gt;0x01&lt;/td&gt;
    &lt;td class=&quot;tg-0lax&quot;&gt;/&lt;/td&gt;
    &lt;td class=&quot;tg-0lax&quot;&gt;&lt;/td&gt;
    &lt;td class=&quot;tg-0lax&quot;&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class=&quot;tip right-tip&quot;&gt;Vazi i obrnuto. Izmjena &lt;code&gt;c&lt;/code&gt; varijable bi promijenila &lt;code&gt;d&lt;/code&gt; varijablu kako obe pokazuju na istu vrijednost.&lt;/p&gt;
&lt;p&gt;Medjutim, treba imati na umu da prijenos po referenci znaci da:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; obj1 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 0x01&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; obj2 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 0x02&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;obj1 &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; obj2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// false&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// false&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// ali&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; obj3 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; obj1&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 0x01&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;obj1 &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; obj3&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// true&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Svaki put kada kreiramo objekat, on je zaseban i cuva se na novoj adresi. Tako &lt;code&gt;{} == {}&lt;/code&gt; je &lt;code&gt;false&lt;/code&gt; jer nisu identicni objekti (&lt;code&gt;0x01 =/= 0x02&lt;/code&gt;), dok &lt;code&gt;obj1 == obj3&lt;/code&gt; jesu jer imaju istu referencu (&lt;code&gt;0x01&lt;/code&gt;).&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; c &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 0x01&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; d &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 0x01&lt;/span&gt;&lt;br /&gt;d&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Jane&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 0x01 dobija novo svojstvo&lt;/span&gt;&lt;br /&gt;d &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token literal-property property&quot;&gt;author&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Joe&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 0x02 definisan je novi objekat&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// {name: &#39;Jane&#39;}&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;d&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// {author: &#39;Joe&#39;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p class=&quot;tip right-tip&quot;&gt;Znakom jednakosti je varijabli &lt;code&gt;d&lt;/code&gt; dodijeljen objekat &lt;code&gt;{}&lt;/code&gt; sa desne strane. &lt;code&gt;c&lt;/code&gt; i &lt;code&gt;d&lt;/code&gt; vise ne pokazuju na isti objekat i modifikovanje vrijednosti jedne varijable nece uticati na vrijednost druge.&lt;/p&gt;
&lt;table class=&quot;tg&quot;&gt;
&lt;thead&gt;
  &lt;tr&gt;
    &lt;th class=&quot;tg-0lax&quot;&gt;Varijabla&lt;/th&gt;
    &lt;th class=&quot;tg-0lax&quot;&gt;Vrijednost&lt;/th&gt;
    &lt;th class=&quot;tg-0lax&quot;&gt;&lt;/th&gt;
    &lt;th class=&quot;tg-0pky&quot;&gt;Adresa&lt;/th&gt;
    &lt;th class=&quot;tg-0pky&quot;&gt;Vrijednost&lt;/th&gt;
  &lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
  &lt;tr&gt;
    &lt;td class=&quot;tg-tf2e&quot;&gt;c&lt;/td&gt;
    &lt;td class=&quot;tg-tf2e&quot;&gt;0x01&lt;/td&gt;
    &lt;td class=&quot;tg-tf2e&quot;&gt;/&lt;/td&gt;
    &lt;td class=&quot;tg-pcvp&quot;&gt;0x01&lt;/td&gt;
    &lt;td class=&quot;tg-pcvp&quot;&gt;{name: &#39;Jane&#39;}&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td class=&quot;tg-0lax&quot;&gt;d&lt;/td&gt;
    &lt;td class=&quot;tg-0lax&quot;&gt;0x02&lt;/td&gt;
    &lt;td class=&quot;tg-0lax&quot;&gt;/&lt;/td&gt;
    &lt;td class=&quot;tg-0lax&quot;&gt;0x02&lt;/td&gt;
    &lt;td class=&quot;tg-0lax&quot;&gt;{author: &#39;Joe&#39;}&lt;/td&gt;
  &lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;funkcija&quot;&gt;Funkcija&lt;/h2&gt;
&lt;p&gt;Okolnosti u kojima se prijenos po vrijednosti i referenci jos primjenjuje je u funkcijama. Kroz argumente smo, u kodu ispod, funkciji proslijedili objekat i vrijednost 43.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; employee &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token literal-property property&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Jane&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 0x01&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;43&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;addAge&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;person&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; age&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  person&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isOld &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; age&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt; &lt;span class=&quot;token comment&quot;&gt;// 0x01.isOld = 43;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;addAge&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;employee&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 0x01, 43&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;employee&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// {name: &#39;Jane&#39;, isOld: 43}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;Objekat nije primitivni tip podatka i prenosi se po referenci, te mu je dodano svojstvo &lt;code&gt;isOld&lt;/code&gt; kroz adresu koja pokazuje gdje se nalazi objekat &lt;code&gt;0x01&lt;/code&gt; u memoriji.&lt;/li&gt;
&lt;li&gt;Sa druge strane, varijabla &lt;code&gt;age&lt;/code&gt; koja sadrzi podatak primitivnog tipa nije proslijedjena kroz referencu, vec je kopirana u funkciju i postoji samo lokalno.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Sta ako varijabli &lt;code&gt;person&lt;/code&gt; kojoj je proslijedjen objekat &lt;code&gt;0x01&lt;/code&gt; dodijelimo novi objekat? Hoce li se globalni objekat &lt;code&gt;employee&lt;/code&gt; promijeniti?&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; employee &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token literal-property property&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Jane&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 0x01&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;43&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;addAge&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;person&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; age&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  person &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token literal-property property&quot;&gt;age&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; age&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span class=&quot;token comment&quot;&gt;// 0x02 = {age: 43};&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;addAge&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;employee&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 0x01, 43&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;employee&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// {name: &#39;Jane&#39;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;person&lt;/code&gt; vise nema referencu na &lt;code&gt;0x01&lt;/code&gt; i kroz tu varijablu ne mozemo izmjeniti &lt;code&gt;employee&lt;/code&gt; objekat, samo lokalni &lt;code&gt;person&lt;/code&gt; objekat na lokaciji &lt;code&gt;0x02&lt;/code&gt;.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Razlika izmedju let i var</title>
    <link href="https://webdevlpr.com/posts/razlika-izmedju-let-i-var/"/>
    <id>https://webdevlpr.com/posts/razlika-izmedju-let-i-var/</id>
    <updated>2022-10-18T17:00:00Z</updated>
    <summary>Ovaj tekst navodi nacine za deklarisanje varijabli i kako je moguce zamijeniti stariji &quot;var&quot; sa kljucnom rijeci &quot;let&quot;, uz mali osvrt na &quot;const&quot;.</summary>
    <content type="html">&lt;figure&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/deklaracija-varijabli.png&quot; alt=&quot;Deklaracija varijabli u JavaScript-u.&quot; /&gt;
&lt;/figure&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Postoje tri nacina da se deklarise varijabla: &lt;code&gt;let&lt;/code&gt;, &lt;code&gt;const&lt;/code&gt; i &lt;code&gt;var&lt;/code&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;const&lt;/code&gt; i &lt;code&gt;let&lt;/code&gt; su se pojavili sa ES6 u 2015. godini, dok se &lt;code&gt;var&lt;/code&gt; koristio od ranih dana JavaScript-a.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Razlika izmedju &lt;code&gt;cont&lt;/code&gt; i &lt;code&gt;let&lt;/code&gt; je ta da je vrijednost &lt;code&gt;const&lt;/code&gt; varijable nepromjenjiva. &lt;code&gt;let&lt;/code&gt; varijabla nije jednako striktna i ona ce prihvatiti drugu vrijednost ako joj je dodijelimo, kao i &lt;code&gt;var&lt;/code&gt; varijabla.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Osim toga, varijable deklarisane sa kljucnom rijeci &lt;code&gt;const&lt;/code&gt; se ponasaju kao i &lt;code&gt;let&lt;/code&gt;. Ono sto vazi za jednu, vazi i za drugu kljucnu rijec.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; poruka &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;poruka &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Uncaught TypeError: Assignment to constant variable.&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Cannot assign to &quot;poruka&quot; because it is a constant&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Iako u &lt;em&gt;vecini&lt;/em&gt; slucajeva mozemo zamijeniti &lt;code&gt;let&lt;/code&gt; i &lt;code&gt;var&lt;/code&gt; i ocekivati da kod radi, princip rada se razlikuje. &lt;code&gt;let&lt;/code&gt; se cesce koristi u modernijim skriptama jer &lt;code&gt;var&lt;/code&gt; predstavlja njegovog prethodnika, dok drugi misle da &lt;code&gt;var&lt;/code&gt; i dalje moze imati znacajnu ulogu u pisanju kvalitetnog i jednostavnijeg koda.&lt;/p&gt;
&lt;h2 id=&quot;var-i-let-opseg&quot;&gt;&quot;var&quot; i &quot;let&quot; opseg&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;var&lt;/code&gt; varijable imaju opseg funkcije ili globalni opseg ako su definisane izvan funkcije, ali su vidljive kroz blokove &lt;code&gt;{}&lt;/code&gt;, uslovne izjave (if) i petlje (while i for loops). U primjeru ispod &lt;code&gt;var&lt;/code&gt; varijabla ne bi bila vidljiva u globalnom opsegu da se nalazi u funkciji. Sa druge strane, &lt;code&gt;let&lt;/code&gt; varijabla ima opseg bloka &lt;code&gt;{}&lt;/code&gt; (bilo kojih viticastih zagrada).&lt;/p&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 2;&quot;&gt;Opseg se odnosi na trenutni kontekst koda, koji odredjuje dostupnost varijabli u JavaScript-u. Vise o ovim konceptima u &lt;a target=&quot;_blank&quot; href=&quot;https://webdevlpr.com/posts/sta-je-closure-u-racunarskom-programiranju/&quot;&gt;closures&lt;/a&gt; i &lt;a target=&quot;_blank&quot; href=&quot;https://webdevlpr.com/posts/kontekst-izvrsenja-i-leksicko-okruzenje/&quot;&gt;execution context&lt;/a&gt; clancima.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; poruka &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; email &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;email@email.com&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;poruka&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// true&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;email&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Uncaught ReferenceError: email is not defined&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;var&lt;/code&gt; varijabla je vidljiva kroz blokove jer nekada u JavaScript-u blokovi nisu imali leksicka okruzenja.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;brojanje&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 1 2 3 4 5 6 7 8 9&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// 10&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;brojanje&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;U sledecem primjeru varijabla &lt;code&gt;i&lt;/code&gt; je dostupna samo unutar for petlje jer je deklarisana sa kljucnom rijeci &lt;code&gt;let&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;brojanje&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 1 2 3 4 5 6 7 8 9&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// Uncaught ReferenceError: i is not defined&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;brojanje&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;hoisting-varijabli&quot;&gt;Hoisting varijabli&lt;/h2&gt;
&lt;p&gt;U prevodu hoisting znaci podizanje, a odnosi se na proces kojim JavaScript engine podize deklaracije varijable na vrh njihovog opsega, prije izvrsenja koda. Posljedicno se deklaracije mogu napisati nakon sto je varijabla koristena ili joj je vrijednost dodijeljena.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ispisImena&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  ime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Ana&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ime&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Ana&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; ime&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// var je funcijskog opsega&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;ispisImena&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Je isto kao i:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ispisImena&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; ime&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  ime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Ana&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ime&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Ana&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;ispisImena&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Iako su deklaracije podignute, dodijeljene vrijednosti nisu. &lt;code&gt;var&lt;/code&gt; varijable imaju &lt;code&gt;undefined&lt;/code&gt; vrijednost do linije u kojoj joj je dodijeljena &lt;code&gt;=&lt;/code&gt; neka druga.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ispisImena&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ime&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// undefined&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; ime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Ivan&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sve ovo ovo ne vazi i za &lt;code&gt;let&lt;/code&gt; varijable.  Iako se podizu na vrh bloka i JavaScript engine je svjestan da su tu, one imaju &lt;em&gt;neinicijalizovano stanje&lt;/em&gt; i nalaze se u privremenoj mrtvoj zoni (temporal dead zone) sve do deklaracije varijable — gotovo kao da varijabla ne postoji.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; ime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Marko&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ispisiIme&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ime&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// ReferenceError: &lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// Cannot access &#39;ime&#39; before initialization&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; ime &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Ian&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;ispisiIme&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;nepostojecaVarijabla&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Uncaught ReferenceError: &lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// nepostojecaVarijabla is not defined&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;ponovno-deklarisanje&quot;&gt;Ponovno deklarisanje&lt;/h2&gt;
&lt;p&gt;Ponovno deklarisanje &lt;code&gt;let&lt;/code&gt; varijable u istom opsegu nije dozvoljeno.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; email&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; email&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// radi 👍&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; poruka&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; poruka&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// SyntaxError: &#39;poruka&#39; has already been declared&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;svojstvo-globalnog-objekta&quot;&gt;Svojstvo globalnog objekta&lt;/h2&gt;
&lt;p&gt;U globalnom opsegu &lt;code&gt;var&lt;/code&gt; varijabla postaje svojstvo globalnog objekta (osim ako koristimo module). Sa &lt;code&gt;let&lt;/code&gt; to nije slucaj.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; poruka &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; email &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;@email.com&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;window&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;poruka&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// true&lt;/span&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;window&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;email&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// undefined&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;var-ili-let&quot;&gt;&quot;var&quot; ili &quot;let&quot;?&lt;/h2&gt;
&lt;p&gt;Kyle Simpson u &amp;quot;&lt;i&gt;You Don&#39;t Know JS&lt;/i&gt;&amp;quot; preporucuje da se &lt;code&gt;var&lt;/code&gt; koristi za one varijable koje trebaju imati funcijski opseg, a &lt;code&gt;let&lt;/code&gt; kada ga treba ograniciti na trenutni blok &lt;code&gt;{}&lt;/code&gt;. Drugi smatraju da je &lt;code&gt;var&lt;/code&gt; greska dizajna koja prividno ciniti stvari &amp;quot;jednostavnijima&amp;quot;, ali ih zapravo komplikuje. Ukoliko zelite varijablu u opsegu funkcije dovoljno je &lt;code&gt;let&lt;/code&gt; deklarisati u funkciji i bice na raspolaganju ugnijezdenim blokovima.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;brojanje&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 1 2 3 4 5 6 7 8 9&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// 10&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;brojanje&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ili ukoliko zelite dodijeliti vrijednost varijabli pod odredjenim uslovima:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; isEmpty&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  isEmpty &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;check&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;isEmpty&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;sazetak&quot;&gt;Sazetak&lt;/h2&gt;
&lt;figure class=&quot;wide-img&quot;&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/difference-variable-declarations.svg&quot; alt=&quot;Poredjenje var, let i conts varijabli.&quot; /&gt; 
 &lt;figcaption&gt;Poredjenje var, let i conts varijabli.&lt;/figcaption&gt;
&lt;/figure&gt;</content>
  </entry>
  
  <entry>
    <title>Eagle — biblioteka za organizaciju medija</title>
    <link href="https://webdevlpr.com/posts/eagle-biblioteka-za-organizaciju-medija/"/>
    <id>https://webdevlpr.com/posts/eagle-biblioteka-za-organizaciju-medija/</id>
    <updated>2022-10-10T17:00:00Z</updated>
    <summary>Eagle desktop aplikacija omogucava kreiranje digitalnih biblioteka za jednostavnu organizaciju, brzu pretragu i pregled medija.</summary>
    <content type="html">&lt;figure class=&quot;wide-img&quot;&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/Eagle.png&quot; alt=&quot;Eagle user interface&quot; /&gt; 
 &lt;figcaption&gt;Eagle korisnicki interfejs.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Eagle desktop aplikacija se mozda najvise plasira dizajnerima kako ima siri obim trikova za slike i omogucava kreiranje efikasnih digitalnih biblioteka, ali to bi ogranicilo njegovu primjenjivost jer podrzava razne &lt;a target=&quot;_blank&quot; href=&quot;https://en.eagle.cool/article/184-what-file-formats-does-eagle-support&quot;&gt;formate&lt;/a&gt; medija (kao dokument, font, audio, video, 3D, gif itd.). Super moc ove aplikacije je organizacija i ⚡ brza pretraga kroz hiljade fajlova (po folderima, kategorijama, ocjenama, formatu fajla, boji koja preovladava, datumu, velicini, trajanju, biljeskama, URL-u itd).&lt;/p&gt;
&lt;p&gt;Neki bi ga cak mogli nazvati i nindza File Explorer!&lt;/p&gt;
&lt;figure style=&quot;max-width: 480px&quot;&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/Ninja.webp&quot; alt=&quot;Eagle user interface&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;i&gt;Zasto je tema Eagle?&lt;/i&gt;&lt;br /&gt;
TLDR: Jer nisam znala da mi treba dok ga nisam otkrila.&lt;/p&gt;
&lt;p&gt;Ispod cu navesti &lt;i&gt;neke&lt;/i&gt; od razloga zasto me je osvojio, ali u obliku bez previse standardne strukture. Pravicu se da smo na kafi, pricati o osobinama koje se isticu jer volimo hvaliti ono sto nam se dopada i mozda ce tekst nekome pomoci da prepozna da li mu nesto slicno uopste treba.&lt;/p&gt;
&lt;h2 id=&quot;web-dizajn-inspiracija&quot;&gt;Web dizajn inspiracija&lt;/h2&gt;
&lt;p&gt;Isprva sam vidjela vrijednost Eagla za skupljanje i organizaciju web dizajn inspiracije zbog brzih snimaka ekrana stranica koje mi se svide i &lt;em&gt;automatizovano cuvanje URL adrese&lt;/em&gt; u meta podacima ali i grabljenje slika sa Dribble, Behance i Pinteresta, &lt;em&gt;cuvanje fontova&lt;/em&gt; itd. Pohrana sadrzaja sa pretrazivaca trenutno mozda najcesce koristim.&lt;/p&gt;
&lt;figure class=&quot;wide-vid&quot;&gt; 
  &lt;video loop=&quot;&quot; controls=&quot;&quot; autoplay=&quot;&quot;&gt;
    &lt;source src=&quot;https://webdevlpr.com/static/img/EagleScreenshot.mp4&quot; type=&quot;video/mp4&quot; alt=&quot;Chrome Eagle ekstenzija pravi snimak stranice i pohranjuje ga u biblioteci.&quot; /&gt;
  &lt;/video&gt;
  &lt;figcaption&gt;Chrome Eagle ekstenzija pravi snimak stranice i pohranjuje ga u biblioteci.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p class=&quot;tip&quot; style=&quot;font-style: normal&quot;&gt;Ali i bez ekstenzije Eagle moze da pravi snimke ekrana. Ako instaliras aplikaciju probaj &lt;code&gt;Ctrl + Alt + E&lt;/code&gt;. Ova kombinacija nudi dodatne alate kao dodavanje teksta, anotacija, zamucenje dijelova slike, olovku itd. Ovako pravim snimke ekrana kada ono sto zelim nije u sklopu pretrazivaca ili kada zelim na najjednostavniji nacin zamutiti dijelove slike. Alternativa bi bila da sacuvam sliku na racunar i uredim je u Adobe programu (radije ne).&lt;/p&gt;
&lt;p&gt;Eagle ekstenzija nudi cuvanje snimaka vidljivog dijela stranice, citave stranice, samo regije, jedne ili grupe fotografija simultano kroz svoju &lt;a target=&quot;_blank&quot; href=&quot;https://en.eagle.cool/extensions&quot;&gt;ekstenziju&lt;/a&gt; koja postoji za najpopularnije pretrazivace (ako takve koristis).&lt;br /&gt;
— Lijevim klikom na sliku (ili .mp4 format za sada) i prevlacenjem se aktivira prozor za cuvanje medija u biblioteci (ili u specificnom folderu po izboru).&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/EagleDragNDrop.PNG&quot; alt=&quot;Eagle user interface&quot; /&gt; 
 &lt;figcaption&gt;Drag and drop aktivira Eagle prozor za cuvanje fotografije.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Jedan mali simpaticni trik za web dizajnere: U ekstenziji postoji opcije &amp;quot;Capture Area&amp;quot; i svi znamo sta ona radi, ali ako u tom modu drzim &lt;code&gt;Ctrl&lt;/code&gt; dok zadrzavam strelicu iznad nekog html elementa - ekstenzija ce ga sama selektovati i snimiti dok bih ja jos rucno pokusavala prilagoditi i popraviti ivice tako da prostor oko elementa bude &amp;quot;normalne velicine&amp;quot;.&lt;/p&gt;
&lt;figure style=&quot;max-width: 494px&quot;&gt; 
  &lt;video loop=&quot;&quot; controls=&quot;&quot; autoplay=&quot;&quot;&gt;
    &lt;source src=&quot;https://webdevlpr.com/static/img/EagleCaptureAreaAutomatic.mp4&quot; type=&quot;video/mp4&quot; alt=&quot;Eagle ekstenzija selektuje HTML elemente u &#39;Capture Area&#39; rezimu&quot; /&gt;
  &lt;/video&gt;
  &lt;figcaption&gt;Eagle ekstenzija selektuje HTML elemente u &quot;Capture Area&quot; rezimu uz &lt;code&gt;Ctrl&lt;/code&gt; dugme.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Eagle, izmedju ostalog, na desnoj bocnoj traci nudi generisanu paletu boja koje preovladavaju na slici, polje za biljeske, a ekstenzija je popunila URL adresu tako da se jednim klikom moze vratiti na izvor na kom je medij pronadjen. Ova super moc bi me spasila bezbroj puta.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/EagleSidebar.PNG&quot; alt=&quot;Desni sidebar prikazuje vise detalja o fajlu (ili folderu).&quot; style=&quot;max-width: 326px&quot; /&gt; 
 &lt;figcaption&gt;Desni sidebar prikazuje vise detalja o fajlu (ili folderu).&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;biblioteka-licnih-fajlova&quot;&gt;Biblioteka licnih fajlova&lt;/h2&gt;
&lt;p&gt;Kako vise ucim o Eaglu, hvatam se da mi ideja kreiranja biblioteke u kojoj bih mogla organizovati sve one slike, videe, audio zapise, digitalne knjige koje su skupljane jos od prvog racunara koji smo imali izaziva euforiju. Ti fajlovi jesu &amp;quot;organizovani&amp;quot; u folderima ali se, ako cu biti iskrena, plasim zaviriti u hrpu nostalgicnog sadrzaja.&lt;/p&gt;
&lt;h2 id=&quot;strasni-sistemi-za-organizovanje-fajlova-derogatory&quot;&gt;Strasni sistemi za organizovanje fajlova (derogatory)&lt;/h2&gt;
&lt;p&gt;Jedan od glavnih razloga zasto me je Eagle osvojio je jer su moji sistemi do sada bili &amp;quot;File Explorer&amp;quot; 📁 i &amp;quot;kreiranje kolekcija&amp;quot;.&lt;/p&gt;
&lt;p&gt;Medjutim, sistem foldera je vrlo bolan za pregled medija i nedostaje mu brzina u svakom aspektu od pregleda, do organizacije i pretrage, niti postoji jednostavan nacin za cuvati dodatne podatke uz medij.&lt;br /&gt;
Kolekcije nisu prakticne kako inspiraciju trazim na nekoliko razlicitih lokacija, ali i njima nedostaje brzina pretrage i dodatne opcije za organizaciju. Na kraju neke slike zavrse na racunaru u folderima, neke inspiracije u kolekcijama a neke u bookmark traci. Ni jedan od ovih sistema nije bio ~dovoljno odrziv i trosi mnogo vremena.&lt;/p&gt;
&lt;p&gt;Vecina rjesenja za ove prituzbe su vec upakovane u Eagle i prekrasan je za pregled hiljade slika i drugih medija. Male generisane slicice daju bolji uvid i dodatne informacije za razlikovanje sadrzaja. Vise pregledanja i manipulacije sadrzaja, manje trazenja i cekanja da se originalni fajl ucita.&lt;/p&gt;
&lt;h2 id=&quot;pretrazivanje-i-organizacija&quot;&gt;Pretrazivanje i organizacija&lt;/h2&gt;
&lt;p&gt;U filter traci iznad liste slika i fajlova su smjestene razne opcije za pretragu. Sistemi organizovanja vise nisu ograniceni na foldere ili naziv fajla, vec ovise o granicama dosjetljivosti ali necemo zanemariti da je svaki fajl moguce staviti u vise kategorija i foldera.&lt;/p&gt;
&lt;figure class=&quot;wide-img&quot;&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/EagleFilters.PNG&quot; alt=&quot;Eagle user interface&quot; /&gt; 
 &lt;figcaption&gt;Eagle opcije za pretragu.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Klik lupe u &lt;code&gt;search&lt;/code&gt; baru otkriva meni iz kog mogu birati da li zelim pretraziti po imenu fajla, foldera, opisu foldera, ekstenziji/formatu, tagovima, URL-u, komentaru i biljeskama. Moje biblioteke jos nisu toliko velike i ostavim sve ove opcije ukljucene kako sam sigurna da cu pronaci ono sto trazim.&lt;/p&gt;
&lt;figure class=&quot;wide-vid&quot;&gt; 
  &lt;video loop=&quot;&quot; controls=&quot;&quot; autoplay=&quot;&quot;&gt;
    &lt;source src=&quot;https://webdevlpr.com/static/img/EagleComment.mp4&quot; type=&quot;video/mp4&quot; alt=&quot;Eagle - ostavljanje komentara na fotografiji i pretraga po njemu.&quot; /&gt;
  &lt;/video&gt;
  &lt;figcaption&gt;Ostavljanje komentara na fotografiji i pretraga po njemu.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;(Nisam se potpuno navikla na brzinu kojom je moguce pronaci, otvoriti fajl i izmjeniti meta podatke. Mozda zvuci kao da pretjerujem ali moji folderi su bili traumaticno iskustvo.)&lt;/p&gt;
&lt;p&gt;Na snimku iznad, pored olovke za komentarisanje postoje jos neki alati poput isjecanja.&lt;br /&gt;
Sa lijeve strane je traka sa folderima i drugim kategorizacijama. Izmijenila sam boje i ikonice foldera da bi se vizuelno razlikovali, a Eagle omogucava kreiranje hijerarhiju foldera po volji. Ni lijeva traka ne zahtjeva neko posebno objasnjavanje jer su interfejs i korisnicko iskustvo intuitivni. Ono sto ocekujem da postoji se nalazi tamo gdje ocekujem da ce biti.&lt;/p&gt;
&lt;p&gt;Mozda &lt;code&gt;Smart Folders&lt;/code&gt; ostavlja prostor za pogadjanje funkcionalnosti, ali je ona zapravo jednostavna. Kada strelicu misa pomjerim iznad te opcije sa desne strane se pojavi plusic. Plusic znaci kreiranje novog pametnog foldera koji nudi opcije za definisanje pravila.&lt;/p&gt;
&lt;figure class=&quot;tip right-tip&quot; style=&quot;--span-row: 2; border-left: none; max-width: 373px&quot;&gt;
  &lt;img src=&quot;https://webdevlpr.com/static/img/EagleCreateSmartFolder.png&quot; alt=&quot;Kreiranje pametnog foldera u Eaglu.&quot; /&gt; 
&lt;/figure&gt;
&lt;p&gt;Recimo, kako bi pametni folder umjesto mene birao headere dovoljno siroke za desktop web stranicu - navela sam da sadrzi slike sire od 1920px iz &lt;code&gt;header&lt;/code&gt; foldera. Drugi primjer bi bio da sve fajlove koji u sebi imaju naziv &amp;quot;Screenshot&amp;quot; budu dio Screenshot foldera.&lt;/p&gt;
&lt;figure&gt;
  &lt;img src=&quot;https://webdevlpr.com/static/img/EagleSmartFolders.PNG&quot; alt=&quot;Prozor za kreiranje pametnog foldera u Eaglu uz definisanje pravila.&quot; style=&quot;max-width: 604px&quot; /&gt; 
  &lt;figcaption&gt;Prozor za kreiranje pametnog foldera u Eaglu uz definisanje pravila.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Pomenula sam i tagove. Oni su tu da pojednostave hijerarhiju foldera kada ih koristim istovremeno. Medjutim, broj tagova raste velikom brzinom i da ih ne bi trazila po hrpi grupisem ih po konceptima.&lt;/p&gt;
&lt;p&gt;Recimo, po folderima sam razdjelila inspiraciju u ovisnosti od koje stranice se radi: homepage, post, about, header, footer itd. Sa tagovima sam ih podijelila po dizajnu i namjeni kao: mobile, blog, portfolio, magazin, online prodavnica, dogadjaj, servis/prozivod, hrana, kompanija, moda itd.&lt;/p&gt;
&lt;figure&gt; 
  &lt;video loop=&quot;&quot; autoplay=&quot;&quot; controls=&quot;&quot;&gt;
    &lt;source src=&quot;https://webdevlpr.com/static/img/EagleGroupTags.mp4&quot; type=&quot;video/mp4&quot; alt=&quot;Grupisanje i organizacija tagova u Eaglu.&quot; /&gt;
  &lt;/video&gt;
  &lt;figcaption&gt;Grupisanje i organizacija tagova.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Ako zelim da pronadjem pocetne stranice bloga - izaberem &amp;quot;homepage&amp;quot; folder i &amp;quot;blog&amp;quot; tag.&lt;/p&gt;
&lt;figure&gt; 
  &lt;video loop=&quot;&quot; autoplay=&quot;&quot; controls=&quot;&quot;&gt;
    &lt;source src=&quot;https://webdevlpr.com/static/img/EagleFilter.mp4&quot; type=&quot;video/mp4&quot; alt=&quot;Filtriranje fajlova u Eaglu po folderu i tagovima&quot; /&gt;
  &lt;/video&gt;
  &lt;figcaption&gt;Filtriranje fajlova u Eaglu po folderu i tagovima.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;eagle-fast&quot;&gt;Eagle-fast&lt;/h2&gt;
&lt;p&gt;Eagle folderi ne rade kao folderi na racunaru. Iako vise foldera u biblioteci ove aplikacije mogu imati istu fotografiju, &lt;em&gt;ona se fizicki nalazi na samo jednoj lokaciji&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Recimo da smo importovali bilo koju sliku u biblioteku. U tom trenutku je kreiran folder sa originalanim fajlom, generisanim thumbnailom za brzi pregled i &lt;code&gt;.json&lt;/code&gt; fajlom u kom se cuvaju svi podaci vezani za importovan medij. Tu vidimo meta podatke po kojima Eagle omogucava ⚡ pretragu cak i po boji. Ukoliko joj dodamo biljesku, tagove ili vise razlicitih foldera, promjena ce se oslikati u &lt;code&gt;.json&lt;/code&gt; fajlu medija.&lt;/p&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;L8KJH4YUE4RW2&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;York Mediale graphic&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;220816&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;height&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2520&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;width&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2520&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;ext&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;png&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;tags&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;clean&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;annotation&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Art, meet the future.&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;folders&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;L8KJHHY1DJ5KR&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;L8LUQA4MLNUBT&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;isDeleted&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;url&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;https://pinterest.com/some-photo/3f6a5d.png&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;modificationTime&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1664303740597&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;palettes&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;color&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;212&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;212&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;227&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;ratio&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;93&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;$$hashKey&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;object:89111&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;color&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;42&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;42&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;48&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;ratio&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2.18&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;$$hashKey&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;object:89112&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;color&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;133&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;135&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;143&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;ratio&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1.4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;$$hashKey&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;object:89113&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;color&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;168&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;169&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;177&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;ratio&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1.08&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;$$hashKey&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;object:89114&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;color&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;180&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;180&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;189&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;ratio&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.49&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;$$hashKey&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;object:89115&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;color&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;108&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;108&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;116&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;ratio&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.35&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;$$hashKey&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;object:89116&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;color&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;156&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;156&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;163&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;ratio&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.32&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;&quot;$$hashKey&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;object:89117&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;mtime&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1664303740520&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;btime&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1664303740520&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;lastModified&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1665086421573&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;mobilnost-medija&quot;&gt;Mobilnost medija&lt;/h2&gt;
&lt;p&gt;Ako probas Eagle mozda primjetis da iako se sve zavrsi uz par klikova, mnogo toga moze zamijeniti i prevlacenje.&lt;/p&gt;
&lt;figure&gt; 
  &lt;video loop=&quot;&quot; controls=&quot;&quot; autoplay=&quot;&quot;&gt;
    &lt;source src=&quot;https://webdevlpr.com/static/img/EagleExportPhoto.mp4&quot; type=&quot;video/mp4&quot; alt=&quot;Eagle - Prevlacenjem thumbnaila u drugo okruzenje kopira originalni fajl.&quot; /&gt;
  &lt;/video&gt;
  &lt;figcaption&gt;Prevlacenjem thumbnaila u drugo okruzenje kopira originalni fajl.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;U biblioteci radije drzim originalne fajlove u punoj rezoluciji i sto boljoj kvaliteti. Za web su ovakvi fajlovi preteski. Kada zelim neke slike koristiti na webu, oznacim njihov thumbnail (dok drzim &lt;code&gt;Ctrl&lt;/code&gt;) i prevucem na web stranicu ili softver koji ce fajlove kompresovati za mene i Eagle ce automatski kopirati originalne fajlove u zadano okruzenje.&lt;/p&gt;
&lt;p&gt;Za importovanje vazi isto, ali mi se cini da nisam napomenula da Eagle podrzava mnoge izvorne formate drugih aplikacija kao Illustrator, Figma i AutoCad.&lt;/p&gt;
&lt;figure&gt; 
  &lt;video loop=&quot;&quot; controls=&quot;&quot; autoplay=&quot;&quot;&gt;
    &lt;source src=&quot;https://webdevlpr.com/static/img/EagleInportAI.mp4&quot; type=&quot;video/mp4&quot; alt=&quot;Prevlacenjem fajla u Eagle ga importuje u trenutnu biblioteku.&quot; /&gt;
  &lt;/video&gt;
  &lt;figcaption&gt;Prevlacenjem fajla u Eagle ga importuje u trenutnu biblioteku.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;A prevlacenjem nekog foldera sa racunara u lijevu traku Eagle aplikacije kopira identicnu hijerarhiju foldera koja se nalazi u njemu i njegov sadrzaj. Ono sto mozes nauciti iz mojih gresaka je da prevlacenje foldera na sredinu ne kopira hijerarhiju foldera, samo fajlove koje folderi sadrze.&lt;/p&gt;
&lt;h2 id=&quot;eksportovanje-slika-po-dimenzijama-i-formatu&quot;&gt;Eksportovanje slika po dimenzijama i formatu&lt;/h2&gt;
&lt;p&gt;Aplikacija nudi eksportovanje citave biblioteke u formi obicnih foldera ili kao biblioteku za Eagle aplikaciju. To je ono sto ocekujemo, ali u ovom tekstu ne govorim o obicnom eksportovanju koje je norma za mnoge aplikacije. Ovo je zgodan trik za web dizajnere kada su potrebne slike u odredjenom formatu i dimenzijama. Kako to izgleda?&lt;/p&gt;
&lt;p&gt;Prvo oznacim sve slike koje zelim eksportovati u odredjenom obliku. U desnoj traci na dnu se nalazi dugme &amp;quot;Export..&amp;quot;. On nudi tri opcije i prve dvije su one &amp;quot;standardne&amp;quot;. Treca je &amp;quot;Export in Specified Format/Dimension&amp;quot;. Voilà.&lt;/p&gt;
&lt;figure&gt;
  &lt;img src=&quot;https://webdevlpr.com/static/img/EeagleExportInFormatDimension.JPG&quot; alt=&quot;Eagle prozor u kom se definisu format i dimenzije za eksportovanje izabranih slika.&quot; style=&quot;max-width: 485px&quot; /&gt; 
  &lt;figcaption&gt;Eagle prozor u kom se definisu format i dimenzije za eksportovanje izabranih slika.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;biblioteka-na-oblaku&quot;&gt;Biblioteka na oblaku&lt;/h2&gt;
&lt;p&gt;Eagle biblioteku pohranjuje lokalno, a trenutno aplikaciju imam na laptopu i racunaru. Nekada ove uredjaje koristim naizmjenicno, ali cesto i istovremeno. Zato biblioteke kojim zelim imati pristup na vise uredjaja (i cak dijeliti sa drugima) cuvam u OneDrive folderu. Bez obzira na kom uredjaju radim, sve promjene koje napravim ce se oslikati i na drugom uredjaju (bar dok imam internet).&lt;/p&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 4;&quot;&gt;💡 Za one koji razmatraju sigurnost: Iako Eagle nudi opciju zakljucavanje aplikacije i zasebnih foldera unutar aplikacije, otvaranjem Eagle biblioteke kroz File Explorer je moguc (nepregledan) pristup fajlovima. Bilo bi korisno kada bi zakljucavanje uskratilo pristup fajlovima potpuno. Medjutim, postoje drugi alternativni nacini da se zastite folderi na racunaru.&lt;/p&gt;
&lt;p&gt;Desava se da zelim iste fajlove koje su smjeseteni u lokalnoj biblioteci imati na onoj na ☁️. Oznacim sve fajlove koje zelim podijeliti, desni klik na jedan od oznacenih fajlova za prikaz menija i biram &amp;quot;Add to Other Library..&amp;quot;.&lt;/p&gt;
&lt;h2 id=&quot;kombinovanje-slika-u-jednu&quot;&gt;Kombinovanje slika u jednu&lt;/h2&gt;
&lt;p&gt;Kada nadjem odgovarajuci dizajn za stranicu i njenu mobilnu verziju zelim ih spojiti zbog preglednosti.&lt;br /&gt;
Dok drzim &lt;code&gt;Ctrl&lt;/code&gt;, lijevim klikom biram slike koje zelim grupisati u jednu. Potom desnim klikom otvaram meni i pored &amp;quot;More&amp;quot; opcije biram &amp;quot;Combine Images&amp;quot;. Red selektovanja slika je vazan jer ga Eagle koristi za redoslijed kojim ih spaja.&lt;/p&gt;
&lt;figure&gt;
  &lt;img src=&quot;https://webdevlpr.com/static/img/EagleCombineImages.JPG&quot; alt=&quot;Eagle - Sjedinjenje nekoliko slika u jednu.&quot; style=&quot;max-width: 604px&quot; /&gt; 
  &lt;figcaption&gt;Sjedinjenje nekoliko slika u jednu.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;pretraga-po-slici&quot;&gt;Pretraga po slici&lt;/h2&gt;
&lt;figure&gt;
  &lt;img src=&quot;https://webdevlpr.com/static/img/EagleReverseImageSearch.JPG&quot; alt=&quot;Eagle pretraga interneta po slici.&quot; style=&quot;max-width: 604px&quot; /&gt; 
  &lt;figcaption&gt;Eagle pretraga interneta po slici.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Ovo je opcija koju nisam ocekivala i koja me je odusevila jer je proces (od kojeg je Eagle napravio dva brza klika) prije izgledao ovako:&lt;/p&gt;
&lt;p&gt;Nekada pronadjem sliku koja mi se svidja ali ona bude premalih dimenzija. Da bih pronasla vecu - pretrazim internet po toj slici. Prvo pronadjem Google images web stranicu, izaberem &amp;quot;Search by image&amp;quot; opciju i nakon toga ucitam sliku sa racunara ili kopiram link fotografije. Zvuci kratko ali me je Google previse razmazio za ovo.&lt;/p&gt;
&lt;h2 id=&quot;fajl-vec-postoji&quot;&gt;Fajl vec postoji&lt;/h2&gt;
&lt;p&gt;Pronalazak da u biblioteci negdje vec postoji identican fajl je sigurno prakticno u mnostvu fajlova. Nema razloga da fizicki zauzima duplo.&lt;/p&gt;
&lt;figure&gt;
  &lt;img src=&quot;https://webdevlpr.com/static/img/EagleDuplicate.PNG&quot; alt=&quot;Eagle prozor koji pita da li korisnik zeli importovati fajl iako vec postoji u biblioteci.&quot; style=&quot;max-width: 604px&quot; /&gt; 
  &lt;figcaption&gt;Eagle prozor koji pita da li korisnik zeli importovati fajl iako vec postoji u biblioteci.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;A postoji i opcija za skeniranje cijele biblioteke u slucaju da je nesto promaklo.&lt;/p&gt;
&lt;figure&gt; 
  &lt;video loop=&quot;&quot; controls=&quot;&quot; autoplay=&quot;&quot;&gt;
    &lt;source src=&quot;https://webdevlpr.com/static/img/EagleScanDuplicate.mp4&quot; type=&quot;video/mp4&quot; alt=&quot;Eagle skeniranje biblioteka u potrazi za duplikatima.&quot; /&gt;
  &lt;/video&gt;
  &lt;figcaption&gt;Eagle skeniranje biblioteka u potrazi za duplikatima.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;sacuvaj-url&quot;&gt;Sacuvaj URL&lt;/h2&gt;
&lt;p&gt;Mozes pohraniti URL i imati uzivo prikaz i interaktivno iskustvo web stranice iz Eagla. To je jos jedna kvalitetna opcija, ali ako mi je vazan sadrzaj ili dizajn onda se odlucim na snimak stranice pored kojeg je svakako sacuvan URL (u slucaju da stranica prestane biti dostupna ili se njen sadrzaj promijeni).&lt;/p&gt;
&lt;figure&gt; 
  &lt;video loop=&quot;&quot; controls=&quot;&quot; autoplay=&quot;&quot;&gt;
    &lt;source src=&quot;https://webdevlpr.com/static/img/EagleSaveURL.mp4&quot; type=&quot;video/mp4&quot; alt=&quot;Cuvanje URL-a u Eaglu.&quot; /&gt;
  &lt;/video&gt;
  &lt;figcaption&gt;Cuvanje URL-a u Eaglu.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p class=&quot;tip right-tip&quot;&gt;Prevlacenje URL adrese iz pretrazivaca ce uraditi isto.&lt;/p&gt;
&lt;p&gt;Kada sacuvam YouTube URL desi se mali dijelic magije 🦄. Eagle ga djelimicno tretira kao video sa cim dolaze i djelimicne super moci. Ovako u galeriji imam videe koje ne moram imati na disku sa najpristupacnijim brzim pregledom (uz zvuk) koji mogu zamisliti.&lt;/p&gt;
&lt;figure style=&quot;max-width: 480px&quot;&gt; 
  &lt;video loop=&quot;&quot; controls=&quot;&quot; autoplay=&quot;&quot;&gt;
    &lt;source src=&quot;https://webdevlpr.com/static/img/EagleYoutubeURLSave.mp4&quot; type=&quot;video/mp4&quot; alt=&quot;Pregled YouTube URL-a u Eagle listi fajlova.&quot; /&gt;
  &lt;/video&gt;
  &lt;figcaption&gt;Pregled YouTube URL-a u Eagle listi fajlova.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;istrazi&quot;&gt;Istrazi&lt;/h2&gt;
&lt;p&gt;Postoji mnostvo opcija ali post bi bio prilicno dug kada bih navela sve a Eagle nudi sazet serijal &lt;a target=&quot;_blank&quot; href=&quot;https://www.youtube.com/watch?v=EZqJNfvIVcg&quot;&gt;tutorijala&lt;/a&gt; i &lt;a target=&quot;_blank&quot; href=&quot;https://en.eagle.cool/article/266-tutorial-1-overview-of-library-and-interface&quot;&gt;bazu znanja&lt;/a&gt; koja je opsirnija. Ako nesto - aplikacija bi mogla nuditi previse opcija i napraviti paradoks izbora? Ali ne bih rekla jer su se potrudili da funkcije budu jednostavne i interfejs izgleda cisto. I dalje treba imati na umu da Eagle nije samo za dizajnere. Pomogao mi je da organizujem i pocistim haos u folderima na dva uredjaja, a opremljen je i trikovima za video, 3D medije, audio zapise, fontove i cak dokumente. Pusticu da istrazis i mozda te pozitivno iznenadi kao mene.&lt;/p&gt;
&lt;p&gt;Na kraju, aplikacija dolazi u &amp;quot;Free trial&amp;quot; modelu sa 30 dana za istrazivanje, a jedna licenca je $29.95 (bar u trenutku pisanja) za dva uredjaja. Nekome bi ovo bio deal breaker i mislim da postoje popusti ali se mozda u produktivnost da uloziti ukoliko ce ti ovakav alat pomoci da radis pametno, a ne vise. + Aplikacija se aktivno razvija i njen roadmap je &lt;a target=&quot;_blank&quot; href=&quot;https://trello.com/b/LSsVep1d/eagle-development-roadmap&quot;&gt;javan&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ako te je zaintrigiralo, ovdje je link za preuzimanje: &lt;a target=&quot;_blank&quot; href=&quot;https://en.eagle.cool/&quot;&gt;en.eagle.cool&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Kontekst izvrsenja i leksicko okruzenje</title>
    <link href="https://webdevlpr.com/posts/kontekst-izvrsenja-i-leksicko-okruzenje/"/>
    <id>https://webdevlpr.com/posts/kontekst-izvrsenja-i-leksicko-okruzenje/</id>
    <updated>2022-07-29T17:00:00Z</updated>
    <summary>Kontekst izvrsenja omogucava JavaScript pokretacu da kontrolise kompleksnost interpretiranja i izvrsavanja koda. Leksicko okruzenje je razlog zasto su zatvorenja moguca u JavaScriptu, a ovi koncepti zajedno objasnjavaju neke od fundamentalnih procesa koji se desavaju u pozadini.</summary>
    <content type="html">&lt;blockquote cite=&quot;https://www.youtube.com/watch?v=cEBkvm0-rg0&quot;&gt;
  &lt;p&gt;Managing complexity is the most important technical topic in software development.
    &lt;cite class=&quot;by&quot;&gt;Steve McConnell&lt;/cite&gt;
  &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Kod obicno razdjelimo u smislene cjeline kako bi kontrolisali slozenost pisanja koda uz pomoc funkcija, modula, objekata itd. Tako &lt;i&gt;kontekst izvrsenja&lt;/i&gt; omogucava JavaScript enginu da kontrolise kompleksnost interpretiranja i izvrsavanja koda.&lt;/p&gt;
&lt;h2 id=&quot;kontekst-izvrsenja&quot;&gt;Kontekst izvrsenja&lt;/h2&gt;
&lt;p&gt;Novi kontekst izvrsenja (Execution Context) je kreiran kad god se skripta ili funkcija izvrsava, a koristi se za pracenje stanja izvrsenja funkcije. JavaScript kod se izvrsava kroz jedan od sledecih konteksta izvrsenja:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Globalani kontekst&lt;/li&gt;
&lt;li&gt;Kontekst funkcije&lt;/li&gt;
&lt;li&gt;Eval - necemo diskutovati jer nije dovoljno relevantan&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;JavaScript engine (prevodilac ili interpreter) stvara novi kontekst kad god se sprema da izvrsi funkciju &lt;code&gt;fn() {...}&lt;/code&gt; ili skriptu koju smo napisali, a svaka skripta pocinje sa &lt;em&gt;globalnim kontekstom izvrsenja&lt;/em&gt;. Svaki sledeci put kada pozovemo funkciju, JS engine kreira novi kontekst izvrsenja, stavlja kontekst funkcije na vrh &lt;em&gt;pozivnog steka&lt;/em&gt; (execution stack) i izvrsava funkciju. Ako u sklopu izvrsenja funkcije (prije nego je ona zavrsila) pozovemo drugu funkciju, kreira se novi kontekst, dodaje se na vrh pozivnog steka i nova funkcija se izvrsava. Takav tok akcija se ponavlja dok se jedna funkcija ne izvrsi do kraja i njen kontekst se izbaci iz steka.  Potom kontrolu preuzima kontekst izvrsenja koji je pozvao tu funkciju.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;forward&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// code&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;move&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;forward&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;move&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pozivni stack LIFO (Last In First Out) za kod iznad se moze predstaviti ovako:&lt;/p&gt;
&lt;pre class=&quot;basic-pre&quot;&gt;
↑ [ Kontekst forward() ] ↓
↑ [ Kontekst move()    ] ↓
↑ [ Globalni kontekst  ] ↓
&lt;/pre&gt;
&lt;h3 id=&quot;struktura-konteksta-izvrsenja&quot;&gt;Struktura konteksta izvrsenja&lt;/h3&gt;
&lt;p&gt;Kontekst izvrsenja konceptualno ima strukturu koja moze izgledati zbunjujuce ali ce njene komponente biti razradjene u tekstu. 🛑: Ispod navedeni objekti postoje teoretski da bi objasnili procese i ne mozemo direktno manipulisati njima.&lt;/p&gt;
&lt;pre class=&quot;basic-pre&quot;&gt;
var executionContext = {
  variableObject: {},
  lexicalEnvironment: {},
  this: {}
}
&lt;/pre&gt;
&lt;p&gt;Ono sto treba imati na umu je da svaki kreirani kontekst ima dvije faze: &lt;em&gt;faza kreiranje&lt;/em&gt; i &lt;em&gt;faza izvrsenja&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;U fazi kreiranja izvrsnog konteksta&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span&gt;Pravi se &lt;code&gt;variableObject&lt;/code&gt; koji sluzi za pocetno skladistenje varijabli, argumenata i deklarisanih funkcija.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Pravi se &lt;code&gt;lexicalEnvironment&lt;/code&gt; kao kopija &lt;code&gt;variableObject&lt;/code&gt; u ovom trenutku.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Definise se vrijednost &lt;code&gt;this&lt;/code&gt; i pokazuje na objekat na koji se funkcija primjenjuje u tom kontekstu.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;U fazi izvrsenja izvrsnog konteksta&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vrijednosti su dodijeljene&lt;/li&gt;
&lt;li&gt;Leksicko okruzenje se koristi za razrjesenje veza i identifikatora&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;pocetno-skladistenje-i-hoisting&quot;&gt;Pocetno skladistenje i hoisting&lt;/h4&gt;
&lt;p&gt;Varijable i funkcije su predstavljene kao svojstva sa vrijednostima unutar objekta koji zastupa kontekst. U fazi kreiranja (prije izvrsenja koda) u tom objektu &lt;code&gt;var&lt;/code&gt; varijable imaju vrijednost &lt;code&gt;undefined&lt;/code&gt;, a svaka deklaracija funkcije unutar konteksta je svojstvo koje pokazuje na sadrzaj funkcije i ona se automatski pohranjuje u memoriju. Ovo znaci da su deklarisane funkcije dostupne i prije nego se skripta pocne izvrsavati, ali ako pristupimo &lt;code&gt;var&lt;/code&gt; varijabli prije nego je definisana za rezultat cemo dobiti &lt;code&gt;undefined&lt;/code&gt;. Ovaj proces pohranjivanja varijabli i deklarisanih funkcija (function declaration) se naziva &lt;em&gt;hoisting&lt;/em&gt;.&lt;/p&gt;
&lt;p class=&quot;tip right-tip&quot;&gt;Hoisting je JavaScript zadano ponasanje premjestanja deklaracija na vrh. Drugim rijecima, funkcije i neke varijable se mogu koristiti prije nego su deklarisane.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;hello&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// undefined&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; hello &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Hello. Pleasure to meet you.&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;sayHi&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Hello. Pleasure to meet you.&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sayHi&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Hello. Pleasure to meet you.&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Kada se function expression pozove prije nego joj je dodijeljena vrijednost, tretira se kao varijabla i ima vrijednost &lt;code&gt;undefined&lt;/code&gt;. Kada je pozovemo prije deklarisanja dobijamo gresku da varijabla nije funkcija:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sayHi&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Uncaught TypeError: sayHi is not a function&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;sayHi&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Hello. Pleasure to meet you.&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ukoliko varijablu deklarisemo sa kljucnim rijecima &lt;code&gt;let&lt;/code&gt; ili &lt;code&gt;const&lt;/code&gt; hoisting nece raditi na isti nacin. Iako se varijabla podize na vrh bloka ona ima &lt;em&gt;neinicijalizovano&lt;/em&gt; stanje i nalazi se u privremenoj mrtvoj zoni (temporal dead zone) — gotovo kao da varijabla ne postoji.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;word&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Uncaught ReferenceError: &lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Cannot access &#39;word&#39; before initialization&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; word &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Oui.&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;nonExistingVariable&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Uncaught ReferenceError: &lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// nonExistingVariable is not defined&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Razlika izmedju nepostojece i neinicijalizovane varijable je u tome sto je JavaScript engine svjestan varijable ali je neupotrebljiva do njene deklaracije. Znamo da je svjestan varijable jer u kodu ispod dobijamo gresku da ne mozemo pristupiti varijabli &lt;code&gt;name&lt;/code&gt; prije inicijalizacije iako je vec jedna varijabla sa istim imenom definisana izvan funkcije.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Mark&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;logName&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// ReferenceError: &lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// Cannot access &#39;name&#39; before initialization&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// Zona privremene neupotrebljivosti varijable je&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// TDZ ili Temporal Dead Zone&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Ian&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// &lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;logName&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;leksicko-okruzenje&quot;&gt;Leksicko okruzenje&lt;/h3&gt;
&lt;p&gt;Svaka skripta, funkcija &lt;code&gt;fn() {...}&lt;/code&gt; i blok koda &lt;code&gt;{...}&lt;/code&gt; koji napisemo ima skriveni objekat &lt;code&gt;variableObject&lt;/code&gt; o kom smo maloprije govorili. Sadrzaj tog objekta se u fazi kreiranja kopira u &lt;code&gt;lexicalEnvironment&lt;/code&gt; objekat i predstavlja leksicko okruzenje. Ovaj objekat se sastoji od&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;environmentRecord&lt;/code&gt; ili zapisanog stanja lokalnog okruzenja ukljucujuci argumente, deklaracije funkcija i varijable. Ovaj objekat &lt;em&gt;cuva zapisana svojstva u kojem je funkcija kreirana&lt;/em&gt; bez obzira gdje je pozvana. Da bi azurirali varijablu, neophodno je promijeniti svojstvo leksickog okruzenja u kom zivi.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Referencu na vanjsko leksicko okruzenje, odnosno roditeljski blok koda. Globalni kontekst nema roditeljski opseg i u tom slucaju je vrijednost reference &lt;code&gt;null&lt;/code&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Zato funkcija definisana unutar druge funkcije ima pristup roditeljskim varijablama, ne i obrnuto. Ovo ponasanje se naziva &lt;em&gt;leksicki opseg&lt;/em&gt; (lexical scoping) koji je kljucan za &lt;a target=&quot;_blank&quot; href=&quot;https://webdevlpr.com/posts/kontekst-izvrsenja-i-leksicko-okruzenje/#&quot;&gt;zatvorenja (closures)&lt;/a&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; phrase &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Pleasure to meet you&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sayHi&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Summer&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;phrase &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39; &#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; name &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;.&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;sayHi&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Pleasure to meet you Summer.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Globalno leksicko okruzenje u fazi izvrsenja&lt;/span&gt;&lt;br /&gt;globalLEnvironment &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;environmentRecord&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token literal-property property&quot;&gt;phrase&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Pleasure to meet you&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token literal-property property&quot;&gt;sayHi&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;outer&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// nema roditeljskog bloka&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Leksicko okruzenje sayHi funkcije&lt;/span&gt;&lt;br /&gt;sayHiLEnvironment &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;environmentRecord&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token literal-property property&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Summer&#39;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;outer&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; globalLEnvironment&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p class=&quot;tip right-tip&quot;&gt;Koje vrijednosti su varijable &lt;code&gt;phrase&lt;/code&gt; i &lt;code&gt;name&lt;/code&gt; imale u fazi kreiranja a koju &lt;code&gt;sayHi&lt;/code&gt;?&lt;br /&gt;Hint: hoisting - &lt;span class=&quot;spoiler&quot;&gt;varijable u fazi kreiranja imaju vrijednost &lt;i&gt;undefined&lt;/i&gt;. Funkcija ima istu vrijednost&lt;/span&gt;. &lt;/p&gt;
&lt;p&gt;Kako identifikator &lt;code&gt;phrase&lt;/code&gt; ne postoji u &lt;code&gt;sayHi&lt;/code&gt; kontekstu moramo pogledati u roditeljski blok koji je naznacen u leksickom okruzenju. Ovaj proces se ponavlja dok se identifikataor ne razrjesi. Ako identifikator nije pronadjen ni u globalnom kontekstu dobicemo &lt;code&gt;ReferenceError&lt;/code&gt;. Ovaj postupak se naziva &lt;em&gt;razrjesenje identifikatora&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;lexicalEnvironment&lt;/code&gt; objekat se cuva u memoriji dok traje izvrsavanje funkcije ili dok postoji referenca na njega. Ako je funkcija zavrsila, ali postoji referenca na njeno leksicko okruzenje onda je jos u memoriji.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;hello&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; greeting &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Hello&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;greeting&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; sayHi &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;hello&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// kreaira novi sayHiEnvironment&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// referencu na leksicko okruzenje hello()&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// vrijednosti se cuvaju u memoriji dok sayHi postoji&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;sayHi &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// leksicko okruzenje vise nije u memoriji&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🛑 JavaScript engine nekih pretrazivaca moze dalje optimizovati i brisati svojstva ovog objekta iz memorije ukoliko optimizacija ne remeti rad aplikacije.&lt;/p&gt;
&lt;h3 id=&quot;zatvorenja&quot;&gt;Zatvorenja&lt;/h3&gt;
&lt;p&gt;Zatvorenja su funkcije koje imaju referencu ka varijablama u vanjskom opsegu iz svog unutrasnjeg opsega i ako niste dosli sa tog clanka — vise o njima se moze pronaci u &lt;a target=&quot;_blank&quot; href=&quot;https://webdevlpr.com/posts/closure-u-racunarskom-programiranju/&quot;&gt;Sta je closure u racunarskom programiranju?&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&quot;vizuelni-prikaz-izvrsnog-konteksta-i-ostalih-tema&quot;&gt;Vizuelni prikaz izvrsnog konteksta i ostalih tema&lt;/h4&gt;
&lt;div class=&quot;iframe-container&quot;&gt;
  &lt;iframe class=&quot;responsive-iframe&quot; src=&quot;https://www.youtube.com/embed/Nt-qa_LlUH0&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;Ovdje mozete pronaci &lt;a target=&quot;_blank&quot; href=&quot;https://ui.dev/javascript-visualizer&quot;&gt;JavaScript Visualiser&lt;/a&gt;: Alat za vizualiziranje izvrsnog konteksta, hoisting, zatvorenja, i opsege u JavaScriptu. Podrzava ES5 sto znaci da ce &lt;code&gt;let&lt;/code&gt; i &lt;code&gt;const&lt;/code&gt; pokazati gresku jer nisu dostupni.&lt;br /&gt;
&lt;code&gt;var&lt;/code&gt; opseg je na nivou funkcije, ne bloka kao u slucaju &lt;code&gt;let&lt;/code&gt; i &lt;code&gt;const&lt;/code&gt;. Iz ovog razloga leksicko okruzenje u aplikaciji mozemo vidjeti na nivou skripte ili funkcije, ne i bloka.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Sta je closure u racunarskom programiranju</title>
    <link href="https://webdevlpr.com/posts/sta-je-closure-u-racunarskom-programiranju/"/>
    <id>https://webdevlpr.com/posts/sta-je-closure-u-racunarskom-programiranju/</id>
    <updated>2022-07-14T17:00:00Z</updated>
    <summary>Zatvorenja su vazna jer kontrolisu sta jeste i nije u opsegu odredjene funkcije, kao i koje varijable se dijele i kako sa funkcijama u istom opsegu.</summary>
    <content type="html">&lt;p&gt;Zatvorenja su vazna jer kontrolisu sta jeste i nije u opsegu odredjene funkcije. Razumijevanje ovakvih procesa doprinosi razumijevanju JavaScripta i ovladavanju slozenijih scenarija.&lt;/p&gt;
&lt;p&gt;Sta je rezultat koda ispod?&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; animal &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;dog&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;printAnimal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;animal&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;  &lt;span class=&quot;token comment&quot;&gt;// pristupa vanjskoj varijabli&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;printAnimal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// poziva funkciju&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Funkcija &lt;code&gt;printAnimal()&lt;/code&gt; radi sa varijablom &lt;code&gt;animal&lt;/code&gt; koja je definisana izvan funkcije. Unutar funkcije vidimo instrukcije za ispisivanje sadrzaja te varijable u konzoli: &lt;code&gt;dog&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Upravo smo vidjeli &lt;i&gt;closure&lt;/i&gt; ili &lt;i&gt;zatvorenje&lt;/i&gt;. U nekim programskim jezicima funkcija ne moze pristupiti varijablama koje su definisane izvan funkcije ili je funkciju neophodno napisati na poseban nacin da bi se to ostvarilo.&lt;/p&gt;
&lt;div class=&quot;tip&quot;&gt;
Java Script closures su &lt;em&gt;funkcije koje pamte svoje vanjske varijable&lt;/em&gt;, tj. takve funkcije imaju referencu na svoje okruzenje u kom su kreirane. Drugim rijecima, zatvorenje funkciji daje &lt;em&gt;pristup&lt;/em&gt; stanjima koje obuhvata vanjska funkcija.
&lt;/div&gt;
&lt;p&gt;Sa druge strane, ovako izgleda samostalna funkcija koja ~nije closure i koristi samo lokalne varijable, proslijedjene kroz argumente, iako tehnicki ona i dalje jeste closure. Zbunjujuce?&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; b&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 3&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Zavisi od toga koga pitamo, neko ce se izjasniti da ovakvu funkciju smatra &amp;quot;uninteresting closure&amp;quot;, neko drugi ce tvrditi da nije zatvorenje uopste jer ne koristi referencu na spoljni opseg (scope).&lt;/p&gt;
&lt;div class=&quot;tip&quot;&gt;
&lt;blockquote cite=&quot;https://www.youtube.com/watch?v=cEBkvm0-rg0&quot;&gt;
 &lt;p&gt;We don&#39;t normally call them closures unless they close over some other context and actually make use of the fact that they do, but at a technical level, they all are closures.
&lt;cite class=&quot;by&quot;&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://stackoverflow.com/a/35130537/8368674&quot;&gt;stack&lt;i&gt;overflow&lt;/i&gt;: T.J. Crowder&lt;/a&gt;&lt;/cite&gt;
 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;h2 id=&quot;ugnijezdene-funkcije-ili-nested-functions&quot;&gt;Ugnijezdene funkcije ili nested functions&lt;/h2&gt;
&lt;p&gt;Obicno kada se misli na closures, one su u kontekstu ugnijezdenih funkcija. Funkcija je ugnijezdena kada se nalazi unutar druge funkcije sto se moze koristiti za organizovanje koda.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sayHiBye&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;firstName&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; lastName&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// pomocna ugnijezdena funkcija&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getFullName&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; fullName &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; firstName &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot; &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; lastName&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; fullName&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Zdravo &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getFullName&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// Zdravo Marko Doe&lt;/span&gt;&lt;br /&gt;  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Dovidjenja &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; fullName &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;  &lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// Error: Uncaught ReferenceError: fullName is not defined&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;sayHiBye&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Marko&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Doe&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Iako unutrasnje funkcije imaju referencu na vanjske, vanjska funkcija nema pristup stanju unutrasnje funkcije (osim onome sto funkcija proslijedi po dizajnu). Pristup je ogranicen izvan viticastih zagrada. To znaci da unutrasnja funkcija ima pristup varijablama &lt;code&gt;firstName&lt;/code&gt; i &lt;code&gt;lastName&lt;/code&gt;, ali vanjska funkcija nema pristup varijabli &lt;code&gt;fullName&lt;/code&gt;. Ovakva enkapsulacija podataka moze sprijeciti curenje i izlaganje podataka tamo gdje nije potrebno.&lt;/p&gt;
&lt;p&gt;Umjesto toga mozemo pozvati &lt;code&gt;getFullName()&lt;/code&gt; u vanjskoj funkciji i vratiti &lt;code&gt;fullName&lt;/code&gt; kao rezultat kroz kljucnu rijec &lt;code&gt;return&lt;/code&gt;.&lt;/p&gt;
&lt;figure&gt; 
  &lt;img src=&quot;https://webdevlpr.com/static/img/closure.jpg&quot; alt=&quot;Closure funkcija demonstrira pristupacnost varijabli u opsegu odredjene funkcije.&quot; /&gt;
  &lt;figcaption&gt;Closure funkcija demonstrira pristupacnost varijabli u opsegu odredjene funkcije.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p class=&quot;tip right-tip&quot;&gt;U JavaScriptu ono sto je unutra ima pristup onome sto je napolju. Kao kod jednosmjernog stakla, mozes vidjeti sta se nalazi napolju, ali ljudi napolju ne mogu vidjeti tebe.&lt;/p&gt;
&lt;p&gt;Ono sto je takodje vrijedno pomena, &lt;em style=&quot;font-style: normal&quot;&gt;ugnijezdenu funkciju varijabli mozemo dodijeliti i kao samu funkciju&lt;/em&gt;, sto kasnije mozemo koristiti negdje drugo. Bez obzira gdje bi je koristili, ona i dalje ima pristup istim vanjskim varijablama.&lt;/p&gt;
&lt;p&gt;U sledecem primjeru varijabli dodjeljujemo sadrzaj ugnijezdene funkcije tako sto pozivamo vanjsku. Vanjska funkcija vraca unutrasnju kroz kljucnu rijeci &lt;code&gt;return&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;vanjskaF&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;vanjskaV&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;unutrasnjaF&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;unutrasnjaV&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Vanjska varijabla: &#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; vanjskaV&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Unutrasnja varijabla: &#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; unutrasnjaV&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; unutrasnjaF&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// ili mozemo napisati&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// return function unutrasnjaF(unutrasnjaV) {...}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; funkcija &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;vanjskaF&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;vanjska&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;funkcija&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sadrzaj &lt;code&gt;funkcija&lt;/code&gt; varijable je sada:&lt;/p&gt;
&lt;pre class=&quot;basic-pre&quot;&gt;
function unutrasnjaF(unutrasnjaV) {
   console.log(&#39;Vanjska varijabla: &#39; + vanjskaV);
   console.log(&#39;Unutrasnja varijabla: &#39; + unutrasnjaV);
 }
&lt;/pre&gt;
&lt;p&gt;Treba imati u vidu da ova vrijednost varijable takodje ostaje svjesna &lt;code&gt;vanjskaV&lt;/code&gt; varijable vanjske funkcije ciju smo vrijednost proslijedili kroz argument.&lt;/p&gt;
&lt;p&gt;Sada cemo pozvati ugnijezdenu funkciju sa argumentom. Naglasavam da — &lt;em style=&quot;font-style: normal&quot;&gt;ugnijezdena funkcija pamti stanje vanjske funkcije i njene varijable bez obzira gdje je pozvana&lt;/em&gt;. To mozemo vidjeti u rezultatu koda ispod, gdje proslijedjen argument vanjskoj funkciji zadrzava vrijednost u oba primjera jer je unutrasnja funkcija pamti.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;vanjskaF&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;vanjskaV&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; brojanje &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;unutrasnjaF&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;unutrasnjaV&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;brojanje&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Vanjska varijabla: &#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; vanjskaV&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Unutrasnja varijabla: &#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; unutrasnjaV&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; funkcija &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;vanjskaF&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;vanjska&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;funkcija&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;unutrasnja&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;funkcija&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;druga unutrasnja&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;U konzoli izgleda ovako:&lt;/p&gt;
&lt;pre class=&quot;basic-pre&quot;&gt;
1
Vanjska varijabla: vanjska
Unutrasnja varijabla: unutrasnja
2
Vanjska varijabla: vanjska
Unutrasnja varijabla: druga unutrasnja
&lt;/pre&gt;
&lt;p class=&quot;tip right-tip&quot;&gt;Sta bi jos pisalo u konzoli kada bi ispod koda definisali novu varijablu?&lt;br /&gt;
&lt;code&gt;let novaF = vanjskaF(&#39;nova&#39;);&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;novaF(&#39;unutrasnja nova&#39;);&lt;/code&gt;&lt;br /&gt;
Da li bi brojac ispisao 3 ili 1? Odgovor: &lt;span class=&quot;spoiler&quot;&gt;Brojac bi se resetovao i prikazao 1.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;U poslednjem primjeru se moze primjetiti da je ugnijezdena funkcija pamtila stanje varijable vanjske funkcije &lt;code&gt;vanjskaV&lt;/code&gt; i &lt;code&gt;brojanje&lt;/code&gt; koja se povecavala svakim pozivom ugnijezdene funkcije. Razlog je &lt;em&gt;leksicko okruzenje koje se kreira na prvom pozivu &lt;code&gt;vanjskaF()&lt;/code&gt;&lt;/em&gt;, ali da ne bi napravili prevelik korak, udubicemo se u tehnicke detalje koji omogucavaju funkcijama u JavaScriptu da pamte varijable i budu zatvorenja.&lt;br /&gt;
U clanku — &lt;a target=&quot;_blank&quot; href=&quot;https://webdevlpr.com/posts/kontekst-izvrsenja-i-leksicko-okruzenje/&quot;&gt;Kontekst izvrsenja i leksicko okruzenje u JavaScriptu&lt;/a&gt; je objasnjeno kako takvi procesi rade u pozadini.&lt;/p&gt;
&lt;p&gt;Closures se najcesce koriste da bi varijabli, koja je proslijedjena jednoj funkciji, kasnije mogli pristupiti u drugoj funkciji.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Implementacija Mocha, Chai i Sinona u projekat</title>
    <link href="https://webdevlpr.com/posts/implementacija-mocha-chai-i-sinona-u-projekat/"/>
    <id>https://webdevlpr.com/posts/implementacija-mocha-chai-i-sinona-u-projekat/</id>
    <updated>2022-06-22T17:00:00Z</updated>
    <summary>Kako podesiti Mocha, Chai i Sinon za testiranje zasnovano na pretrazivacu?</summary>
    <content type="html">&lt;figure&gt; 
  &lt;img src=&quot;https://webdevlpr.com/static/img/mocha-browser.png&quot; alt=&quot;Mocha automated Unit testing in browser. Error message.&quot; /&gt;
  &lt;figcaption&gt;Mocha automatizovano Unit testiranje u pretrazivacu.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;cdn&quot;&gt;CDN&lt;/h2&gt;
&lt;p&gt;Uz &lt;a target=&quot;_blank&quot; href=&quot;https://cdnjs.com/about&quot;&gt;cdnjs&lt;/a&gt; servis je jednostavno podesiti okruzenje za pisanje testova koji su zasnovani na pretrazivacu. Nije neophodno preuzeti sve fajlove da bi se sluzili bibliotekama jer su mnoge JavaScript i CSS biblioteke pohranjene javno na GitHubu. cdnjs opsluzuje oko 12.5% svih stranica na internetu i nije najbolji izbor za svaku priliku, ali je nekada i vise nego praktican u odnosu na druge.&lt;/p&gt;
&lt;p&gt;Za Mochu je potrebno:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- Mocha css stilizuje stranicu sa rezultatima --&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;link&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;//cdnjs.cloudflare.com/ajax/libs/mocha/1.13.0/mocha.css&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;stylesheet&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- Mocha framework --&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;//cdnjs.cloudflare.com/ajax/libs/mocha/1.13.0/mocha.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;span class=&quot;token language-javascript&quot;&gt;&lt;br /&gt;  mocha&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setup&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;bdd&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// minimalno podesavanje&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- #mocha div u sebi drzi rezultate testova. --&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;mocha&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- mocha.run(); pokrece testove --&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;span class=&quot;token language-javascript&quot;&gt;&lt;br /&gt;  mocha&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Za Chai je potrebno:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- Chai --&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;//cdnjs.cloudflare.com/ajax/libs/chai/1.10.0/chai.min.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;span class=&quot;token language-javascript&quot;&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; assert &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; chai&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;assert&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// assert je dostupan globalno&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Za Sinon je potrebno:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;  &lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- Sinon --&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;//sinonjs.org/releases/sinon-1.12.2.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I projektne skripte:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;  &lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- Kod koji treba testirati. --&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- Testovi. --&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;&amp;quot;&amp;gt;&lt;/code&gt; mora biti u zaglavlju,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;&amp;lt;script&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt; moze biti u zaglavlju ili tijelu.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;&amp;lt;div id=&amp;quot;mocha&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt; mora biti u tijelu &lt;code&gt;.html&lt;/code&gt; dokumenta i&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;mocha.run();&lt;/code&gt; mora biti nakon &lt;code&gt;&amp;lt;div id=&amp;quot;mocha&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Praktican primjer:&lt;/p&gt;
&lt;iframe class=&quot;wide-img&quot; frameborder=&quot;0&quot; width=&quot;100%&quot; height=&quot;500px&quot; src=&quot;https://replit.com/@srhx/Mocha-Chai-and-Sinon?lite=true&quot;&gt;&lt;/iframe&gt;
&lt;h2 id=&quot;mocha-chai-i-sinon-instalacija&quot;&gt;Mocha Chai i Sinon instalacija&lt;/h2&gt;
&lt;p&gt;CDN nije jedina opcija. Ako ne zelite ovisiti o linku na koji ne mozete uticati — Mocha, Chai i Sinon se mogu instalirati u sklopu projekta kroz terminal:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; init &lt;span class=&quot;token parameter variable&quot;&gt;-y&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; mocha chai sinon --save-dev&lt;/code&gt;&lt;/pre&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 2;&quot;&gt;Na racunaru je neophodno imati instaliran Node.js da bi &lt;code&gt;npm&lt;/code&gt; komande radile.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;.html&lt;/code&gt; dokument je isti ali se putevi razlikuju jer smo kroz instalaciju fajlove pohranili lokalno.&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token doctype&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;!&lt;/span&gt;&lt;span class=&quot;token doctype-tag&quot;&gt;DOCTYPE&lt;/span&gt; &lt;span class=&quot;token name&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- stylesheets --&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;link&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;stylesheet&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;./node_modules/mocha/mocha.css&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- library scripts --&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;./node_modules/mocha/mocha.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;./node_modules/chai/chai.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;./node_modules/sinon/pkg/sinon.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;span class=&quot;token language-javascript&quot;&gt;&lt;br /&gt;      mocha&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setup&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;bdd&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;span class=&quot;token language-javascript&quot;&gt;&lt;br /&gt;      &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; assert &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; chai&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;assert&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;br /&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- project scripts --&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;app.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;test.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;mocha&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;span class=&quot;token language-javascript&quot;&gt;&lt;br /&gt;      mocha&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;dodatni-linkovi&quot;&gt;Dodatni linkovi&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://webdevlpr.com/posts/mocha-js-testiranje/&quot;&gt;Mocha automatizovano Unit testiranje&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>Mocha — automatizovano JavaScript testiranje</title>
    <link href="https://webdevlpr.com/posts/mocha-automatizovano-javascript-testiranje/"/>
    <id>https://webdevlpr.com/posts/mocha-automatizovano-javascript-testiranje/</id>
    <updated>2022-06-15T17:00:00Z</updated>
    <summary>Mocha je JavaScript framework za testiranje. Bogata je funkcijama i radi na Node.js. Koristi se za komponentno i integraciono testiranje, i odlican je kandidat za BDD (Behavior Driven Development).</summary>
    <content type="html">&lt;p&gt;Mocha je &lt;i&gt;JavaScript framework za testiranje&lt;/i&gt;. Bogata je funkcijama i radi na Node.js. Koristi se za komponentno (eng. unit) i integraciono testiranje (eng. integration testing), i odlican je kandidat za razvoj vodjen ponasanjem (eng. Behavior Driven Development ili BDD).&lt;/p&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 2;&quot;&gt;Razlika izmedju unit i integracionog testiranja: U unit testiranju se testira komponenta odvojena od ostatka programa - integraciono testiranje testira nekoliko komponenata koje rade zajedno.&lt;/p&gt;
&lt;h2 id=&quot;zasto-je-testiranje-vazno-za-razvoj-softvera&quot;&gt;Zasto je testiranje vazno za razvoj softvera&lt;/h2&gt;
&lt;p&gt;Cilj testiranja softvera je pronalazenje gresaka, propusta i neispunjenih zahtjeva u odnosu na postavljene zahtjeve. &lt;em&gt;Pronalazak ovih gresaka u ranijim fazama cini ispravljanje lakse, brze i jeftinije&lt;/em&gt;. Sto se ranije testiranje uvede u projekat - to bolje.&lt;/p&gt;
&lt;p&gt;Osim sto se brine za ispunjavanje zahtjeva i presretanje gresaka prije nego proizvod bude dostupan korisniku, komponentno testiranje obicno uslovljava programera da pise sto modularniji kod. Testovi i modularan kod omogucavaju dodavanje novih funkcija ili izmjenu postojeceg koda bez straha. Ovakvi faktori cine kod, proces i proizvod kvalitetnijim.&lt;/p&gt;
&lt;h3 id=&quot;zasto-je-automatizovano-testiranje-vazno&quot;&gt;Zasto je automatizovano testiranje vazno&lt;/h3&gt;
&lt;p&gt;Prilikom manuelnog testiranja lako je propustiti greske jer kroz razvoj necega, na umu imamo razne scenarije upotrebe proizvoda. Tesko je ocekivati od developera da ih sve provjeri nakon svake promjene koda. Ovakve okolnosti su plodno tlo za ispravljanje jedne greske bez svijesti o nastanku druge.&lt;/p&gt;
&lt;h2 id=&quot;razvoj-vodjen-ponasanjem&quot;&gt;Razvoj vodjen ponasanjem&lt;/h2&gt;
&lt;p&gt;Razvoj vodjen ponasanjem ili BDD je agilni pristup za razvoj softvera. Intuitivno je napisati kod i potom ga testirati. Uz BDD se prvo fokusira na plan, tj. prvo se pise test. Kroz test se dokumentuje i &lt;i&gt;definise kako dio programa treba raditi&lt;/i&gt; u odredjenim okolnostima.&lt;/p&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 2;&quot;&gt;Ovi testovi su ujedno testovi, dokumentacija i primjeri ili ocekivanja.&lt;/p&gt;
&lt;p&gt;Sledeci korak je pisanje koda dok ne ispuni sva ocekivanja testa. U pocetku ni jedan uslov nece biti ispunjen i kod se usavrsava dok svi uspjesno ne prodju test.&lt;/p&gt;
&lt;!-- Kada sve greske iz testa budu ispravljene, pisu se testovi za sledecu funkciju koju je potrebno implementirati i ponovo se pise kod dok svi zahtjevi novog testa ne budu ispunjeni. --&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;Highlight App&lt;br /&gt;    getHighlights&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;      ✔ returns typeof array&lt;br /&gt;    getNumberOfHighlights&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;      ✔ returns typeof number&lt;br /&gt;      &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; number is above &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt; passing &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;10ms&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; failing&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Isprva nema potrebe brinuti da li je kod efikasan ili izgleda dobro. U tom trenutku je fokus na ispunjavanju zahtjeva testa. Testovi koji prodju bez gresaka ukazuju da kod radi ono sto bi trebao i fokus moze biti na optimizovanju koda i njegovoj citljivosti. Ovaj proces se naziva refaktorisanje koda. U toku refaktorisanja koda, testovi ce istog trenutka pokazati ukoliko neka od funkcija prestane raditi i greska se moze ispraviti.&lt;/p&gt;
&lt;p&gt;Navedeni razvojni ciklus se naziva &lt;code&gt;red &amp;gt; green &amp;gt; refactor&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;Red&lt;/code&gt;: Napisati test za novu funkcionalnost komponente. Kao referenca na nesto sto jos ne postoji isprva prikazuje gresku.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;Green&lt;/code&gt;: napisati najlaksi kod koji ce ispuniti zahtjev testa.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;Refactor&lt;/code&gt;: popraviti kvalitet i optimizovati kod.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Ponoviti ciklus.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 2;&quot;&gt;Ovo je razvojni ciklus pretka BDD pristupa - Test Driven Development. BDD ima vise koraka, ali su navedeni sustinski za developere. &lt;a target=&quot;_blank&quot; href=&quot;https://www.baeldung.com/cs/bdd-guide&quot;&gt;Vise informacija&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;bdd-benefiti&quot;&gt;BDD benefiti&lt;/h3&gt;
&lt;p&gt;Cak i kada postane nejasno gdje poceti zbog kompleksnosti komponente, BDD pomaze pri razbijanju problema na manje i jednostavnije dijelove na temelju kojih dalje razvijamo sve slozeniju funkcionalnost. Osim sto BDD pristup vodi kroz jednostavnije pisanje koda, dobijamo i testove kao i pazljivije promisljene funkcije. Ovakvi testovi sami pristojno dokumentuju i objasnjavaju kod drugima jer govore kako funkcije rade i sta se od njih ocekuje.&lt;/p&gt;
&lt;h2 id=&quot;mocha-automatizovano-testiranje-na-djelu-%F0%9F%A6%B8&quot;&gt;Mocha automatizovano testiranje na djelu 🦸&lt;/h2&gt;
&lt;p&gt;Koristicemo &lt;a target=&quot;_blank&quot; href=&quot;https://mochajs.org/&quot;&gt;Mocha&lt;/a&gt; framework sa uobicajnim funkcijama testiranja (poput &lt;code&gt;describe&lt;/code&gt; i &lt;code&gt;it&lt;/code&gt; koji se koriste za organizovanje i izvrsenje testova) i biblioteku sa razlicitim tvdnjama i ocekivanjima. Node.js vec ima ugradjenu biblioteku tvrdnji, ali su dostupne opseznije biblioteke poput Chai, Expect.js, Should.js itd. Biramo &lt;a target=&quot;_blank&quot; href=&quot;https://www.chaijs.com/&quot;&gt;Chai&lt;/a&gt;.&lt;/p&gt;
&lt;p class=&quot;tip right-tip&quot;&gt;I Mocha i Chai su pogodni za testiranje u pretrazivacu i za testiranje na strani servera, ali se ovdje bavimo pretrazivacem.&lt;/p&gt;
&lt;h3 id=&quot;kako-instalirati-i-podesiti-mocha-i-chai&quot;&gt;Kako instalirati i podesiti Mocha i Chai&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; mochatest &lt;br /&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; mochatest&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; index.js&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; init &lt;span class=&quot;token parameter variable&quot;&gt;-y&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; mocha chai --save-dev&lt;br /&gt;code &lt;span class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p class=&quot;tip right-tip&quot;&gt;6. Otvara projekat u VSC-u ako terminal pokazuje na folder u kom je projekat ili `code put/do/foldera`.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Prvo kreiramo &lt;code&gt;mochatest&lt;/code&gt; folder kroz terminal.&lt;/li&gt;
&lt;li&gt;Druga linija terminalu pokazuje da mijenjamo folder na kom radimo.&lt;/li&gt;
&lt;li&gt;Kreiramo fajl &lt;code&gt;index.js&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Potom inicijalizujemo &lt;code&gt;npm&lt;/code&gt; u nasem projektu (Node Package Manager je najveci svjetski softverski registar i developeri ga koriste da dijele softver).  &lt;code&gt;npm&lt;/code&gt; je instaliran uz Node.js i komanda nece raditi ukoliko Node.js nije instaliran na kompjuteru.&lt;/li&gt;
&lt;li&gt;Nakon inicijalizacije instaliramo Mocha i Chai biblioteku u projekat sto se oslikava u &lt;code&gt;package.json&lt;/code&gt; fajlu:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token property&quot;&gt;&quot;devDependencies&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;chai&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;^4.3.6&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;mocha&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;^10.0.0&quot;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mocha ce traziti folder nazvan &lt;code&gt;test&lt;/code&gt; i unutar testnog foldera bi trebali oponasati strukturu foldera aplikacije koja se testira.&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;test&lt;/span&gt; &lt;br /&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;test&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; indexTest.js&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Da bi pokretali testove napravicemo jednu izmjenu u &lt;code&gt;package.json&lt;/code&gt; fajlu. &lt;code&gt;&amp;quot;test&amp;quot;: &amp;quot;echo &#92;&amp;quot;Error: no test specified&#92;&amp;quot; &amp;amp;&amp;amp; exit 1&amp;quot;&lt;/code&gt; cemo zamjeniti sa &lt;code&gt;&amp;quot;test&amp;quot;: &amp;quot;mocha&amp;quot;&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token property&quot;&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;&quot;test&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;mocha&quot;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ukoliko u terminalu napisemo komandu &lt;code&gt;npm test&lt;/code&gt;, Mocha ce pokrenuti sve testove u &lt;code&gt;test&lt;/code&gt; folderu. Kako jos uvijek nemamo napisane testove dobijamo poruku &lt;span style=&quot;color: green;&quot;&gt;&lt;code&gt;0 passing (1ms)&lt;/code&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;h3 id=&quot;describe-i-it&quot;&gt;Describe i it&lt;/h3&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token function&quot;&gt;describe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Calculator&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;describe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Addition&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token function&quot;&gt;it&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;should sum two numbers&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;token comment&quot;&gt;// Chai tvrdnja&lt;/span&gt;&lt;br /&gt;      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;describe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Division&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span class=&quot;token function&quot;&gt;it&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;should divide two numbers&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;       &lt;span class=&quot;token comment&quot;&gt;// Chai tvrdnja&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   &lt;span class=&quot;token function&quot;&gt;it&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;should return NaN if the denominator is 0&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;token comment&quot;&gt;// Chai tvrdnja&lt;/span&gt;&lt;br /&gt;      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;it&lt;/code&gt; poziv identifikuje svaki pojedinacni test, ali ne govori kako Mocha treba strukturirati test suite ili paket. To radi &lt;code&gt;describe&lt;/code&gt;. Testni paket opisuje i sadrzi set ciljeva ili tvrdnji koji zajedno sluze vecem slicnom cilju. Testni paket &amp;quot;Calculator&amp;quot; moze imati unutrasnje pakete sabiranja, oduzimanja, mnozenja i dijeljenja. Unutar testnog paketa &amp;quot;Division&amp;quot; su definisana dva testa koji trebaju utvrditi da li su brojevi ispravno podijeljeni i da li funkcija moze ispravno iznjeti dijeljenje ako je djelitelj 0.&lt;/p&gt;
&lt;h3 id=&quot;chai-tvrdnje-ili-ocekivanja&quot;&gt;Chai tvrdnje ili ocekivanja&lt;/h3&gt;
&lt;p&gt;Mozda je Chai najlakse shvatiti iz primjera. Prvo cemo predstaviti Chai biblioteku i ocekivanja na pocetku testnog fajla, ali i gdje ce se nalaziti kod aplikacije.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; expect     &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;chai&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;expect&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; calculator &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;../index&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;calculator&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;someFunction&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;Infinity&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;to&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;be&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;NaN&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 2;&quot;&gt;
Chai ima 3 razlicita stila tvrdnji: &lt;code&gt;expect&lt;/code&gt;, &lt;code&gt;assert&lt;/code&gt; i &lt;code&gt;should&lt;/code&gt;. Postoje manje razlike u stilovima - &lt;a target=&quot;_blank&quot; href=&quot;https://www.chaijs.com/guide/styles/#differences&quot;&gt;link&lt;/a&gt; za vise informacija. One za pocetak nisu znacajne i ovdje je prikazan &lt;code&gt;expect&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Poslednja linija je tvrdnja i izgleda kao recenica na engleskom jeziku: ocekujem da &lt;code&gt;someFunction(Infinity)&lt;/code&gt; iz fajla &lt;code&gt;index.js&lt;/code&gt; vrati vrijednost &lt;code&gt;NaN&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;uvod-u-mocha-i-chai-automatizovano-testiranje&quot;&gt;Uvod u Mocha i Chai automatizovano testiranje&lt;/h3&gt;
&lt;p&gt;&lt;span style=&quot;color: #aa0000&quot;&gt;&lt;code&gt;Red&lt;/code&gt;&lt;/span&gt; faza ciklusa. Imajte na umu da nas implementacijski kod u ovom trenutku ne postoji, ali to nas ne sprecava da pisemo testove kao da implementacija postoji. Znamo da cemo funkciju za sabiranje nazvati &lt;code&gt;add()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Chai tvrdnja za sabiranje ocekuje da funkcija &lt;code&gt;add(50, 39)&lt;/code&gt; vrati vrijednost 89 i da &lt;code&gt;add(4, 2)&lt;/code&gt; bude jednaka 6:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token function&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;calculator&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;39&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;to&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;equal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;89&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;calculator&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;to&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;equal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I nas &lt;code&gt;indexTest.js&lt;/code&gt; bi sada trebao izgledati ovako:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; expect     &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;chai&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;expect&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; calculator &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;../index&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;describe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Calculator&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;describe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Addition&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token function&quot;&gt;it&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;should sum two numbers&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;token function&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;calculator&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;to&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;equal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;token function&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;calculator&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;39&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;to&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;equal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;89&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dovoljno je da samo jedna tvrdnja ne prodje da rezultat &lt;code&gt;it&lt;/code&gt; testa bude negativan bez detaljnijih informacija sta je poslo krivo. Iz ovog razloga nije preporucljivo pod istim &lt;code&gt;it&lt;/code&gt; testom provjeravati nekoliko razlicitih tvrdnji.&lt;/p&gt;
&lt;p&gt;Pokrenucemo testove sa komandom &lt;code&gt;npm run test&lt;/code&gt; u terminalu da bi vidjeli sta ce se desiti. Test ne bi trebao proci jer ne postoji implementacijski kod za sabiranje.&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;put&lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;do&lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;projektnog&lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;foldera&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;test&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; mochatest@1.0.0 &lt;span class=&quot;token builtin class-name&quot;&gt;test&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; mocha&lt;br /&gt;&lt;br /&gt;  Calculator&lt;br /&gt;    Addition&lt;br /&gt;      &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; should &lt;span class=&quot;token function&quot;&gt;sum&lt;/span&gt; two numbers&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; passing &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;5ms&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; failing&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;color: green&quot;&gt;Green&lt;/span&gt; faza ciklusa. Recimo da smo nakon toga napisali kod koji ce ispuniti zahtjeve testa u &lt;code&gt;index.js&lt;/code&gt; fajlu i ponovo pokrecemo testove.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;add&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; b&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;module&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;exports &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  add&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;put&lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;do&lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;projektnog&lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;foldera&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;test&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  Calculator&lt;br /&gt;    Addition&lt;br /&gt;      ✔ should &lt;span class=&quot;token function&quot;&gt;sum&lt;/span&gt; two numbers&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; passing &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;5ms&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Znamo da kod radi ono sto bi trebalo! Recimo da nema potrebe za refaktorizacijom i idemo dalje. Pisemo test za dijeljenje dva broja i znamo da ce se funkcija koja dijeli dva broja zvati &lt;code&gt;divide()&lt;/code&gt;. Chai ocekuje da ce funkcija &lt;code&gt;divide(50, 5)&lt;/code&gt; vratiti vrijednost 10, ali test ne moze proci kako funkcija jos ne postoji.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; expect     &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;chai&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;expect&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; calculator &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;../index&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;describe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Calculator&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;describe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Addition&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token function&quot;&gt;it&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;should sum two numbers&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;token function&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;calculator&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;to&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;equal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;token function&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;calculator&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;39&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;to&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;equal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;89&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;describe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Division&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span class=&quot;token function&quot;&gt;it&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;should divide two numbers&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;       &lt;span class=&quot;token function&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;calculator&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;divide&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;to&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;equal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;put&lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;do&lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;projektnog&lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;foldera&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;test&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  Calculator&lt;br /&gt;    Addition&lt;br /&gt;      ✔ should &lt;span class=&quot;token function&quot;&gt;sum&lt;/span&gt; two numbers&lt;br /&gt;    Division&lt;br /&gt;      &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; should divide two numbers&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; passing &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;6ms&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; failing&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Potom dodajemo &lt;code&gt;divide()&lt;/code&gt; funkciju u &lt;code&gt;index.js&lt;/code&gt; fajlu koja ce dijeliti dva broja.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;add&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; b&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;divide&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; b&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;module&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;exports &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  add&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  divide&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;put&lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;do&lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;projektnog&lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;foldera&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;test&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  Calculator&lt;br /&gt;    Addition&lt;br /&gt;      ✔ should &lt;span class=&quot;token function&quot;&gt;sum&lt;/span&gt; two numbers&lt;br /&gt;    Division&lt;br /&gt;      ✔ should divide two numbers&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; passing &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;5ms&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Medjutim, dijeljenje sa nulom u JavaScriptu daje beskonacno. Ono sto nam vise odgovara je &lt;code&gt;NaN&lt;/code&gt; (Not a Number). Pisemo test koji ce potvrditi da bilo koje dijeljenje sa nulom vraca &lt;code&gt;NaN&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; expect     &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;chai&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;expect&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; calculator &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;../index&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;describe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Calculator&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;describe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Addition&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token function&quot;&gt;it&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;should sum two numbers&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;token function&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;calculator&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;to&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;equal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;token function&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;calculator&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;39&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;to&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;equal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;89&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;describe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Division&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span class=&quot;token function&quot;&gt;it&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;should divide two numbers&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;       &lt;span class=&quot;token function&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;calculator&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;divide&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;to&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;equal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class=&quot;token function&quot;&gt;it&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;should return NaN if the denominator is 0&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;      &lt;span class=&quot;token function&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;calculator&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;divide&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;to&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;be&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;NaN&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;put&lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;do&lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;projektnog&lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;foldera&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;test&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  Calculator&lt;br /&gt;    Addition&lt;br /&gt;      ✔ should &lt;span class=&quot;token function&quot;&gt;sum&lt;/span&gt; two numbers&lt;br /&gt;    Division&lt;br /&gt;      ✔ should divide two numbers&lt;br /&gt;      &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; should &lt;span class=&quot;token builtin class-name&quot;&gt;return&lt;/span&gt; NaN &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; the denominator is zero&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; passing &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;7ms&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; failing&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Test nam govori da funkcija &lt;code&gt;divide()&lt;/code&gt; ne radi bas kako zelimo i reci cemo joj da prvo provjeri da li je djelilac 0 i ako jeste da vrati vrijednost &lt;code&gt;NaN&lt;/code&gt;, ako djelilac nije 0 - da podijeli dva ponudjena broja. Na ovaj nacin mozemo ispuniti i prvi i drugi zahtjev.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;add&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; b&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;divide&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; b&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; b &lt;span class=&quot;token operator&quot;&gt;!==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; b &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;NaN&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;module&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;exports &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  add&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  divide&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;put&lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;do&lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;projektnog&lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;foldera&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;test&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  Calculator&lt;br /&gt;    Addition&lt;br /&gt;      ✔ should &lt;span class=&quot;token function&quot;&gt;sum&lt;/span&gt; two numbers&lt;br /&gt;    Division&lt;br /&gt;      ✔ should divide two numbers&lt;br /&gt;      ✔ should &lt;span class=&quot;token builtin class-name&quot;&gt;return&lt;/span&gt; NaN &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; the denominator is zero&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt; passing &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;6ms&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Kod za oduzimanje i mnozenje je dovoljno jednostavan i mozete ga sami dodati. Ovaj tekst je za sada samo uvod. Istrazite dokumentacije i eksperimentisite sa kompleksnijim problemima.&lt;/p&gt;
&lt;h2 id=&quot;dodatni-linkovi&quot;&gt;Dodatni linkovi&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://javascript.info/testing-mocha#the-spec-in-action&quot;&gt;Automated testing with Mocha&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://youtu.be/u5cLK1UrFyQ&quot;&gt;Intro To JavaScript Unit Testing &amp;amp; BDD (2 Hour+ Course)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://mochajs.org/&quot;&gt;Mocha.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://www.chaijs.com/&quot;&gt;Chai.js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>Computer Science kursevi sa prestiznih fakulteta</title>
    <link href="https://webdevlpr.com/posts/Computer-Science-kursevi-sa-prestiznih-fakulteta/"/>
    <id>https://webdevlpr.com/posts/Computer-Science-kursevi-sa-prestiznih-fakulteta/</id>
    <updated>2022-05-22T19:33:53Z</updated>
    <summary>Ako vam papir i diplome nisu vazne koliko znanje i zelite samostalno uciti osnove racunarskih nauka — fakulteti poput Harvarda i Stanforda nude neke od svojih kurseva besplatno.</summary>
    <content type="html">&lt;p&gt;Ako vam papir i diplome nisu vazne koliko znanje i prioritet je ovladavanjem racunarskim naukama — fakulteti poput Harvarda i Stanforda nude neke od svojih kurseva besplatno. Postoje i opcije za one koji zele sveobuhvatni nastavni plan.&lt;/p&gt;
&lt;figure&gt;
  &lt;img src=&quot;https://webdevlpr.com/static/img/cs50-harvard-theatre-sanders.png&quot; alt=&quot;CS50 u Harvardovom Sanders teatru&quot; /&gt; 
  &lt;figcaption&gt;CS50 u Harvardovom Sanders teatru.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;cs50-introduction-to-computer-science&quot;&gt;CS50 Introduction to Computer Science&lt;/h2&gt;
&lt;div class=&quot;tip right-tip&quot; style=&quot;--span-row: 2; border-left: none&quot;&gt;
  &lt;figure style=&quot;max-width: 120px; margin-left: auto; margin-right: auto&quot;&gt;
    &lt;img src=&quot;https://webdevlpr.com/static/img/logo-harvard.png&quot; alt=&quot;Fakultet Harvard nudi kurs racunarskih nauka besplatno.&quot; /&gt; 
    &lt;!-- &lt;figcaption&gt;Harvard University.&lt;/figcaption&gt; --&gt;
  &lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://pll.harvard.edu/course/cs50-introduction-computer-science&quot;&gt;CS50&lt;/a&gt; je uvodni kurs za racunarske nauke i umjetnost programiranja za one sa ili bez prethodnog programerskog iskustva sa &lt;i&gt;Harvarda&lt;/i&gt;. David J. Malan uci kako razmisljati kroz algoritme i efikasno rjesavati probleme. Teme ukljucuju apstrakciju, algoritme, strukture podataka, enkapsulaciju, upravljanje resursima, sigurnost, softversko inzenjerstvo i web development.&lt;br /&gt;
Ukljuceni jezici: C, Python, SQL, JavaScript, CSS i HTML.&lt;/p&gt;
&lt;h2 id=&quot;cs101-introduction-to-computing-principles&quot;&gt;CS101 Introduction to Computing Principles&lt;/h2&gt;
&lt;div class=&quot;tip right-tip&quot; style=&quot;--span-row: 2; border-left: none&quot;&gt;
  &lt;figure style=&quot;max-width: 100px; margin-left: auto; margin-right: auto&quot;&gt;
    &lt;img src=&quot;https://webdevlpr.com/static/img/logo-stanford.png&quot; alt=&quot;Fakultet Stanford nudi kurs racunarskih nauka besplatno.&quot; /&gt; 
    &lt;!-- &lt;figcaption&gt;Harvard University.&lt;/figcaption&gt; --&gt;
  &lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://web.stanford.edu/class/cs101/index.html&quot;&gt;CS101&lt;/a&gt; sa &lt;i&gt;Stanforda&lt;/i&gt; poducava osnovnim idejama racunarstva za publiku bez prethodnog iskustva. Ovaj kurs umjesto kodiranja uci vise o tome kako racunari rade i tehnickim konceptima. Osim razumijevanja kako kompjuteri rade, ovaj kurs demistifikuje mnoge teme koje ukljucuju racunare i definisu svijet oko nas poput umjetne inteligencije, sigurnosti racunara, bitcoina, kriptovalute, te internet.&lt;/p&gt;
&lt;h2 id=&quot;computer-science-programming-with-a-purpose&quot;&gt;Computer Science Programming with a Purpose&lt;/h2&gt;
&lt;div class=&quot;tip right-tip&quot; style=&quot;--span-row: 2; border-left: none&quot;&gt;
  &lt;figure style=&quot;max-width: 100px; margin-left: auto; margin-right: auto&quot;&gt;
    &lt;img src=&quot;https://webdevlpr.com/static/img/logo-princeton.png&quot; alt=&quot;Fakultet Princeton nudi kurs racunarskih nauka besplatno.&quot; /&gt; 
    &lt;!-- &lt;figcaption&gt;Harvard University.&lt;/figcaption&gt; --&gt;
  &lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://www.coursera.org/learn/cs-programming-java&quot;&gt;Programming with a Purpose&lt;/a&gt; sa fakulteta &lt;i&gt;Princeton&lt;/i&gt; pokriva prvu polovinu knjige &lt;i&gt;Computer Science: An Interdisciplinary Approach&lt;/i&gt; (druga polovina je pokrivena u Coursera kursu Computer Science: Algorithms, Theory, and Machines). Namjera je uciti programiranje u naucnom kontekstu i to kroz upoznavanje sa programskim elementima poput varijabli, kondicionala, petlji, nizova i ulazno/izlaznih jedinica. Zatim se okrece funkcijama, sa kljucnim konceptima kao rekurzija, modularno programiranje, ponovna upotreba koda i moderno objektno orjentisano programiranje.&lt;/p&gt;
&lt;p&gt;Kurs uci osnovnim vjestinama za rjesavanje racunarskih problema kroz Java programski jezik, ali koje su primjenjive i u drugim modernim racunarskim okruzenjima. Drugim rijecima, fokus je na osnovnim konceptima, ne na Javi.&lt;/p&gt;
&lt;h2 id=&quot;computer-science-od-open-source-society-university&quot;&gt;Computer Science od Open Source Society University&lt;/h2&gt;
&lt;p&gt;Ovo je malo drugaciji koncept. Do sada su navedeni kursevi koji se fokusiraju na pocetnike ili na vrlo usko znanje u sklopu racunarskih nauka. &lt;a target=&quot;_blank&quot; href=&quot;https://github.com/ossu/computer-science&quot;&gt;OSSU nastavni plan i program&lt;/a&gt; je sveobuhvatni nastavni plan racunarskih nauka sklopljen od online materijala i resursa.&lt;/p&gt;
&lt;p&gt;Drugim rijecima, OSSU je sastavio &lt;em&gt;temeljan nastavni plan&lt;/em&gt; (ono sto dobijemo na fakultetu) iz mnogobrojnih besplatnih online resursa. OSSU na ovaj nacin nudi samoukim studentima strukturu, nesto sa cim se cesto borimo kada ne znamo sta ne znamo i sta je sledece potrebno savladati. Evo kako otprilike izgleda OSSU nastavni plan: &lt;a target=&quot;_blank&quot; href=&quot;https://free-compsci-degree-imc.notion.site/The-Open-Source-Computer-Science-Degree-b799dc75720c48fcb602e58c0c103155&quot;&gt;The Open-Source Computer Science Degree&lt;/a&gt;&lt;/p&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 2;&quot;&gt;Navedeni koncept se moze primjeniti i samostalno bez obzira sta ucimo. Kako? Nastavni plan &#39;ukrasti&#39; od placenih organizovanih kurseva i potom potraziti besplatan materijal.&lt;/p&gt;
&lt;h2 id=&quot;dodatni-linkovi&quot;&gt;Dodatni linkovi&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://cs50.harvard.edu/python/2022/&quot;&gt;Harvard: CS50’s Introduction to Programming with Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://online.umich.edu/series/python-for-everybody/&quot;&gt;Michigan: Python for Everybody&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://dev.to/manocormen/500-free-computer-science-online-courses-from-the-world-s-top-cs-universities-3pg5&quot;&gt;MIT, Stanford, Harvard: 500 Free Computer Science Courses from World&#39;s Top-50 CS Universities&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>Promisljeno vjezbanje</title>
    <link href="https://webdevlpr.com/posts/promisljeno-vjezbanje/"/>
    <id>https://webdevlpr.com/posts/promisljeno-vjezbanje/</id>
    <updated>2022-03-17T19:33:53Z</updated>
    <summary>Promisljeno vjezbanje se odnosni na specificnu vrstu prakse koja je svrsishodna i sistematicna. Dok standardan nacin vjezbanja nerijetko ukljucuje bezumno ponavljanje, promisljena vjezba zahtjeva fokusiranu paznju i provodi se sa specificnim ciljem popravljanja performansi.</summary>
    <content type="html">&lt;p&gt;Namjerno/promisljeno vjezbanje je poznato kao &lt;i&gt;deliberate practice&lt;/i&gt;. Ovakvo vjezbanje se odnosni na specificnu vrstu prakse koja je &lt;em&gt;svrsishodna i sistematicna&lt;/em&gt;. Dok standardan nacin vjezbanja nerijetko ukljucuje bezumno ponavljanje, promisljena vjezba zahtjeva fokusiranu paznju i provodi se sa specificnim ciljem popravljanja performansi na umu.&lt;/p&gt;
&lt;blockquote&gt;
 &lt;p&gt;The right sort of practice carried out over a sufficient period of time leads to improvement. Nothing else.
 &lt;cite class=&quot;by&quot;&gt;Anders Ericsson&lt;/cite&gt;
 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pravi se pazljiva &lt;em&gt;dekonstrukcija cilja&lt;/em&gt;, odnosno dijeli &lt;em&gt;u manje i lakse savladive segmente&lt;/em&gt;. Te se &lt;em&gt;potpuno fokusira na jedan segment&lt;/em&gt; i svaka sesija ima unaprijed odredjenu svrhu. U pocetku je obicno dovoljno pojaviti se i upijati, ali je vremenom lakse nehajno previdjeti sitne greske i propustiti svakodnevnu priliku za iskonski napredak. Ovo se desava jer u pocetnoj fazi, dok je nesto potpuno nepoznato, pazljivo obracamo paznju na svaki korak. Ponasanje se automatizuje kroz ponavljanje koraka iznova i ono postaje nepromisljena navika. Vjezba kao bezumno ponavljanje je neprijatelj namjernom/promisljenom vjezbanju. Pocinjemo pretpostavljati da postojece vjestine postaju bolje jer sticemo iskustvo, dok zaista samo jacamo ustanovljene navike. Zato postoji tvrdnja da ce oni koji se poslom bave dvadeset godina vjerovatno imati slabiji ucinak od onih koji to rade samo pet.&lt;/p&gt;
&lt;p&gt;Pored pazljive dekonstrukcije cilja u manje dijelove, potrebno je &lt;em&gt;otkriti slabosti&lt;/em&gt;, &lt;em&gt;testirati nove strategije&lt;/em&gt; za svaki segment i &lt;em&gt;integrisati one djelotvorne u svoju vjezbu&lt;/em&gt; i praksu. Pravovremene povratne informacije (otkrivanje slabosti i analiza ucinka) i vjezbanje na rubu trenutnih sposobnosti je najveca razlika izmedju promisljene vjezbe i pukog ponavljanja aktivnosti.&lt;/p&gt;
&lt;div class=&quot;tip right-tip&quot; style=&quot;--span-row: 2;&quot;&gt;
  &lt;div class=&quot;iframe-container&quot;&gt;
    &lt;iframe class=&quot;responsive-iframe&quot; src=&quot;https://www.youtube-nocookie.com/embed/YKACzIrog24&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&quot;kako-promisljeno-uciti-programiranje&quot;&gt;Kako promisljeno uciti programiranje&lt;/h2&gt;
&lt;p&gt;Istrajnost u namjernoj/promisljenoj vjezbi, uprkos nepovoljnim okolnostima, zahtjeva intrinzicnu &lt;i&gt;motivaciju&lt;/i&gt;. Drugim rijecima, da je moguce naci zadovoljstvo u aktivnosti zbog nje. Ekstrinzicna motivacija je manje efikasna u &lt;b&gt;odrzavanju istrajnosti kroz duzi vremenski period kontinuiranih gresaka i neuspjeha&lt;/b&gt; dok se ne ovlada vjestinom.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Analiziranje i dekonstrukcija zeljene vjestine u segmente&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Za prvi korak je neophodno sagledati siru sliku, potom glavni &lt;b&gt;cilj podijeliti u manje sistematicne segmente&lt;/b&gt; ili ciljeve. Eksperti sa nesvakidasnjom preciznoscu ovaj put dijele u male detaljne potciljeve i gotovo da nije moguce biti previse specifican sa njima. Ne da bi ucinak bio popravljen na svim poljima odjednom, vec da bi znali koji je sledeci cilj koji ce dobiti punu paznju.&lt;/p&gt;
&lt;p&gt;Bez skiciranja mape puta nije moguce stici na odrediste. Tako pitanje &amp;quot;Koji je najdjelotvorniji put od mjesta gdje se nalazim do mjesta gdje zelim stici?&amp;quot; moze voditi u pravom smijeru. Ako samostalno odredjivanje puta nije najoptimalnije, zasto ne uciti od nekoga ko je vec savladao vjestinu i napravio provjerenu &lt;a target=&quot;_blank&quot; href=&quot;https://roadmap.sh/frontend&quot;&gt;mapu puta&lt;/a&gt; (ili uporediti nastavni plan kursa, sadrzaj knjige, vlogova i blogova developera koji su pricali na tu temu itd.)?&lt;/p&gt;
&lt;p&gt;Note 📝: Nema potrebe biti opsjednut savrsenom dekonstrukcijom puta. Pocni i prilagodi po potrebi.&lt;/p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Izazovi na granici trenutnih sposobnosti.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Za svaki segmet je potrebno &lt;b&gt;odrediti grupu zadataka koja ima za cilj da gura izvan trenutnih sposobnosti u okviru segmenta&lt;/b&gt; (ka cilju). U ovoj fazi se ne radi o sto duzoj listi zadataka koje treba obaviti ili kvantitetu. Fokus treba biti na izazovu koji pomjera granice trenutnih programerskih vjestina na nacin da je &lt;i&gt;tezak i dostizan&lt;/i&gt; u isto vrijeme. Nakon odredjenog perioda van komfor zone (tijelo i u ovom slucaju) um se prilagodjava i takvo ponasanje postaje navika.&lt;/p&gt;
&lt;p&gt;Na primjer, svaki zadatak uciniti oko 10% tezim od nivoa koji zvuci prijatno. Mozda je dobro povremeno izabrati znacajniji izazov i testirati koliko je zapravo moguce zagristi.&lt;/p&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Usporiti namjernu/promisljenu vjezbu.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Trebalo bi raditi brzinom koja odgovara trenutnoj ucinkovitosti i omogucava kontrolu preciznosti. Bolja metoda je ponavljati ispravne korake polako da bi se izgradila solidna automatizovana osnova. Brzim pomjeranjem je znacajniji rizik da se nauce i internalizuju pogresne vjestine.&lt;/p&gt;
&lt;p&gt;Vjezba moze izazvati osjecaj frustracije zbog gresaka. Usljed nestrpljivosti lako je ubrzati sledeca ponavljanja. Ovdje nema potrebe zuriti sa naporima. Uzmite nekoliko trenuta da saberete misli, shvatite gdje je nastala greska, a zatim ponovite korake jos sporije. Odrzite sporiji tempo dok ne osjetite samopouzdanje u vezi povecavanja brzine.&lt;/p&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;Fokus.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Zajednicka karakteristika medju onima koji brze usvajaju vjestinu je mogucnost odrzavanja intenzivnog fokusa duzi vremenski period. Sto je intenzivniji fokus tokom promisljene vjezbe znacajniji su rezultati. Medjutim, moderni svijet je pun distrakcija i dinamicnog sadrzaja koji skracuje raspon paznje.&lt;/p&gt;
&lt;p&gt;Izgradnja fokusa je proces. U redu je poceti malim koracima i postepeno povecavati trajanje fokusiranog rada. Kljuc je birati okolinu bez distrakcija i imati spreman plan kako reagovati kada se ona pojavi. U ovisnosti od okolnosti, za izbjegavanje eksternih distrakcija je moguce ostaviti telefon u drugoj prostoriji, blokirati obavjestenja i sajtove, koristiti slusalice, raditi u tihom prostoru koji sluzi samo za produktivnost itd. Ukrotiti unutrasnje distrakcije znaci sprijeciti um da prekida tok rada. Fizicka aktivnost, istezanje, meditacija, redovne pauze pomazu u ovome, ali i &amp;quot;brain dump&amp;quot; papir za sve nevezane misli koje se mogu ostaviti za kasnije.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Potpun fokus u kracim sesijama je superiorniji od djelimicnog u duzim&lt;/em&gt;. Dobra ideja je izbjegavati planiranje vjezbanja u duzim vremenskim intervalima i prilagodjavanje intenziteta vjezbe da bi ona mogla istrajati tokom zadanog vremena. Djelotvornija promisljena vjezba je sa najintenzivnijim mogucim fokusom u trajanju koje je izvedivo (kraci periodi - sprint), potom uzeti pauzu i ponavljati ovaj sablon.&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://en.wikipedia.org/wiki/Pomodoro_Technique&quot;&gt;Pomodoro tehnika 🍅&lt;/a&gt; se bazira na ovakvim sesijama. Ako Pomodoro ima previse grubu strukturu za vas, pauze mozete planirati nakon sto &lt;a target=&quot;_blank&quot; href=&quot;https://en.wikipedia.org/wiki/Flow_(psychology)&quot;&gt;&lt;em&gt;flow&lt;/em&gt;&lt;/a&gt; stanje zavrsi na prirodan nacin. Prisilni prekidi flow stanja su iritantni. Pauze mogu trajati od 5, 10, 15, 30 minuta do dan ili dva. Sistem treba biti prilagodjen osobi, a za to je potrebno eksperimentisati i slusati tijelo. Na primjer, osjecaj pospanosti, neugodnosti, bola ili iscrpljenosti su znakovi za pauzu.&lt;/p&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;Prakticna primjena.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Lako je pobrkati sticanje znanja sa ovladavanjem vjestine. Znanje na mnogo nacina daje lazan osjecaj napretka. &lt;em&gt;Sticanje vjestina zahtjeva nespretnu primjenu znanja iznova&lt;/em&gt; i iznova sto izaziva osjecaj frustracije i nesposobnosti (bar isprva). Sticanje vjestine je iz ovog razloga neprijatno iskustvo i znak da se radi o pravom putu.&lt;br /&gt;
Nakon tutorijala je neophodno usvojeno znanje testirati u realnim prakticnim primjerima kroz brojna ponavljana i testiranja.&lt;/p&gt;
&lt;ol start=&quot;6&quot;&gt;
&lt;li&gt;Sistem za dobijanje pravovremenih povratih informacija.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Promisljeno vjezbanje ukljucuje &lt;em&gt;kontinuiran rad na slabostima&lt;/em&gt;. Mjerenje omogucava zapazanje da li je cilj postignut, koje strategije su djelotvorne, opazanje i eliminisanje drugih slabih tacaka. Skoro je nemoguce postati bolji bez svijesti o svojim trenutnim sposobnostima i gdje se one nalaze na putu do cilja.&lt;/p&gt;
&lt;p&gt;Svaki put pri opazanju greske ili slabosti, zapisite u &lt;i&gt;listu sa preprekama&lt;/i&gt; &lt;code&gt;impediments.txt&lt;/code&gt; i oznacite njen prioritet na putu dostizanja cilja. Npr:&lt;br /&gt;
&lt;code&gt;1/zid/crveno&lt;/code&gt; - nije moguce nastaviti bez rjesavanja slabosti,&lt;br /&gt;
&lt;code&gt;2/prepreka/narandzasto&lt;/code&gt; - jacanje vjestine ce znacajno popraviti rad,&lt;br /&gt;
&lt;code&gt;3/korisno/ljubicasto&lt;/code&gt; - korisno, ali nije hitno.&lt;/p&gt;
&lt;p&gt;U ovome ne treba zaboraviti procjeniti koristene alate u procesu. Da li se koriste na najoptimalniji nacin i postoji li nesto bolje? Pri svakom uocavanju slabosti okrenite se ka listi prepreka. Vjerovatno je &lt;i&gt;necete cesto otvarati onda kada ne izlazite iz komforne zone&lt;/i&gt;.&lt;/p&gt;
&lt;!-- 
Ben Franklin used a similar strategy when he was improving his writing skills.

He would read an article from his favorite newspaper a couple of times. Then he would deconstruct the techniques the author used. He would put the article away and try to replicate it in a similar fashion. After he wrote his version, he would compare the results and analyze his execution.
 --&gt;
&lt;p&gt;Mozete pronaci mentora koji ce pregledati, komentarisati kod, ukazati na bolje rjesenje ukoliko postoji, diskutovati novu tehnologiju i dekonstrukciju cilja. Iskusniji programeri mogu brzo primjetiti sta pocetnik radi pogresno i takve povratne informacije ce postediti osobu mnogih borbi i potrosenog vremena.&lt;/p&gt;
&lt;p&gt;Ukoliko postoji ispravno rjesenje za problem koji rjesavate, mozete uporediti svoj i ispravan kod. Uzmite vrijeme da analizirate kako ispravan kod radi i po cemu se razlikuje od vaseg pristupa. Kopiranje bez razumijevanja jaza u razlici je lisavanje sebe povratne informacije koja bi pomogla u izgradnji vjestine.&lt;/p&gt;
&lt;blockquote&gt;
 &lt;p&gt;Testing leads to failure, and failure leads to understanding.
 &lt;cite class=&quot;by&quot;&gt;Burt Rutan&lt;/cite&gt;
 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pri citanju necijeg dobro napisanog koda na GitHubu, iskoristite priliku da kod uporedite sa vasim trenutnim razumijevanjem kako treba kodirati. Dekonstruisite kod i tehnike koje je autor koristio, potom bez gledanja probajte napraviti rjesenje poput njegovog. Poslednja faza je analiziranje konacnog rezultata u odnosu na originalni kod. Ovo je povratna informacija.&lt;br /&gt;
Moguce je i potraziti jos rjesenja, te ih uporediti i odrediti koje je bolje i zasto.&lt;/p&gt;
&lt;ol start=&quot;7&quot;&gt;
&lt;li&gt;Prilagodjavanje.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Vazno je odvojiti malo vremena i analizirati sta je bila namjera, a sta se zapravo desilo, te na osnovu zakljucaka iz povratne informacije prilagoditi strategije vjezbanja. Prilagodjavanje je u promisljenom/namjernom vjezbanju sustinsko inace izostaje napredak. Stvar je u tome da odgovor nije uvijek uloziti vise napora jer postoji granica kada ovakav pristup gubi ucinak. Tada je konstruktivnije pristupiti problemu iz vise uglova i eksperimentisati.&lt;/p&gt;
&lt;ol start=&quot;8&quot;&gt;
&lt;li&gt;Ponavljanje, ponavljanje i ponavljanje.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Dosljedno ponavljanje mozak shvata kao znak da je nova informacija ili ponasanje vrijedno usvajanja i autuomatizovanja.&lt;br /&gt;
Faza ponavljanja ne bi trebala biti laka jer svjesno reprogramiranje svog mozga nije. On prirodno tezi poznatom. Ponavljanje aktivnosti unutar zone komfora nije jednako promisljenom/namjernom vjezbanju i stanju ucenja.&lt;/p&gt;
&lt;p&gt;Jedini siguran nacin da pokusaj ucenja bude neuspjesan je odustajanje. Sa dosljednom navikom ucenja materijal ce neminovno biti usvojen.&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;oporavak&quot;&gt;8. Odmaranje, punjenje baterija i oporavak. 🌴&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Dosljednost ne treba pomjesati sa kontinuiranom aktivnoscu. Za ucinkovito usvajanje i rjesavanje problema mozak zasluzuje odmor od mentalnih izazova. Iako je ponavljanje vazno, izostanak oporavka izaziva kontraefekat i nesto sto se naziva burnout sindrom. S obzirom na zahtjevnost namjerne/promisljene vjezbe, nemoguce je praktikovati cijeli dan.&lt;/p&gt;
&lt;blockquote&gt;
 &lt;p&gt;A finding that is remarkably consistent across disciplines is that four or five hours a day seems to be the upper limit of deliberate practice, and this is frequently accomplished in sessions lasting no more than an hour to ninety minutes.
 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Odredite vrijeme za aktivnosti koje ne zahtjevaju mentalni napor, zabavne su ili/i opustajuce (tusiranje, setnja, pisanje u dnevnik, igranje igrica, pranje sudja, pripremanje hrane, slusanje muzike, bastovanstvo, vjezbanje, druzenje sa prijateljima, joga, meditacija, spavanje ili nesto slicno sto ne zahtjeva previse napornog razmisljanja). U toku promisljenog vjezbanja treba zaista vjezbati, a u periodu oporavka zaista napuniti baterije.&lt;/p&gt;
&lt;p&gt;Kada mozak nije u fokusiranom, onda je u difuznom nacinu rada. To znaci da misli kreativno i slobodno lutaju u ovom stanju. Oba nacina su korisna, ali je vazno uspostaviti balans da bi se dobio najbolji moguci efekat iz oba. &lt;b&gt;U fokusiranom rezimu je fokus na savladavanju detalja, a u difuznom se grade veze izmedju njih&lt;/b&gt; (tj. kako se detalji uklapaju zajedno).&lt;/p&gt;
&lt;p&gt;Kada se umorite ili suocite sa preprekom tokom promisljenog/namjernog vjezbanja - pogresno je forsirati. Treba vam neka potpuno druga opustajuca aktivnost na najmanje pet minuta. Vraticete se svjeziji, odmorniji i zadovoljniji sa novokreiranim vezama.&lt;/p&gt;
&lt;h2 id=&quot;dodatni-linkovi&quot;&gt;Dodatni linkovi&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://fs.blog/deliberate-practice-guide/&quot;&gt;The Ultimate Deliberate Practice Guide: How to Be the Best&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>Tehnike za aktivno ucenje programiranja</title>
    <link href="https://webdevlpr.com/posts/tehnike-za-aktivno-ucenje-programiranja/"/>
    <id>https://webdevlpr.com/posts/tehnike-za-aktivno-ucenje-programiranja/</id>
    <updated>2022-03-05T19:33:53Z</updated>
    <summary>Potrebno je vjezbati na djelotvoran nacin odredjen raspon vremena da bi ono vodilo ka poboljsanju vjestina.</summary>
    <content type="html">&lt;p&gt;Balansiranje izmedju pasivnog i aktivnog ucenja je vazno jer gledanje videa ili citanje teksta (pasivno ili konceptualno ucenje) ne znaci da je nesto savladano. Drugim rijecima, posmatranjem utakmica ili kako se rade magicni trikovi kartama ne znaci da je steceno znanje primjenljivo. Sticanje vjestine je najdjelotvornije sa aktivnim metodama ucenja. Zato se vise broji — &lt;em&gt;opsjednutost primjenom nad teorijom&lt;/em&gt;. Pokvarite kod, pravite greske, gradite projekte, rjesavajte probleme i u procesu koristite Google i Stack Overflow.&lt;/p&gt;
&lt;h2 id=&quot;djecija-radoznalost&quot;&gt;Djecija radoznalost&lt;/h2&gt;
&lt;p&gt;Dobra je ideja biti dijete i &lt;em&gt;uzeti par minuta na kraju videa, igrati se sa kodom i izazvati gresku&lt;/em&gt;. Na primjer, zapitati se sta napisani kod radi i sta ce se desiti ukoliko se izmijeni neki dio (koji vama mozda ima smisla), potom ga izmijeniti, vidjeti da li ce web pregledac i dalje razumjeti kod ili prikazati neku specificnu gresku. Popravite kod i ponovo pokvarite. Um ce jasnije usvojiti kako kod funkcionise. Ili&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Pronadjite mali projekat koji je neko drugi napisao i koji je zanimljiv.&lt;/li&gt;
&lt;li&gt;Rasclaniti ga red po red.&lt;/li&gt;
&lt;li&gt;Zatim poceti mijenjati kod i posmatrati sta promjene uzrokuju.&lt;/li&gt;
&lt;li&gt;Kada ne kodirate mozete citati tekstove na temu koja je povezana sa projektom.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;samostalno-rekreiranje-projekta&quot;&gt;Samostalno rekreiranje projekta&lt;/h2&gt;
&lt;p&gt;Takodje mozete &lt;em&gt;samostalno rekreirati projekat bez pomoci videa&lt;/em&gt; koji ste pratili. Pozeljno je koristiti internet i Stack Overflow. U toku procesa mozda odustanete misleci da niste ni blizu, a falila je jedna linija koda. &lt;em&gt;U redu je ako pokusaj nije uspjesan&lt;/em&gt; i normalno je osjetiti frustriranost. Ona je dio procesa ucenja&amp;lt;3 !! Izaberite projekte i izazove koji vode vjestine do same granice i malo izvan nje.&lt;/p&gt;
&lt;h2 id=&quot;the-feynman-technique&quot;&gt;The Feynman Technique&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Kada pokusavate savladati neku materiju, pokusajte to nauciti nekoga drugog&lt;/em&gt;. Ova tehnika sprecava da previdimo nedostatak znanja sto je korisno ukoliko je potrebno temeljno razumjeti temu. Osnovni koraci Fejnmanove tehnike ucenja:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Uciti&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Objasniti nekome jednostavnim izrazima&lt;/b&gt;. U toku ovog koraka je neizbjezno pronaci rupe u znanju (sto je i cilj).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Popuniti praznine&lt;/b&gt;. Pronaci informacije koje nedostaju. Svrha koraka je fokusirati se na slabosti.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Pojednostaviti&lt;/b&gt;. Nije lako otkloniti nered i visak informacija, te objasniti nesto dovoljno jasno da i mala djeca mogu razumjeti.  4. korak tjera na dublje razmisljanje o temi i razumijevanje kako se dijelovi informacija uklapaju zajedno.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ponoviti korake dok proces ne bude uspjesan.&lt;/p&gt;
&lt;h2 id=&quot;biljeske-i-komentarisanje-koda&quot;&gt;Biljeske i komentarisanje koda&lt;/h2&gt;
&lt;p&gt;Vjerovatno cete pisati biljeske i vremenom primjetiti da nemaju znacaj za prisjecanje informacija kao sto su imale kada bi se pripremali za test. U ovom slucaju komentarisanje koda djelotvornije &lt;em&gt;produbljuje razumijevanje materije&lt;/em&gt;. U programiranju je puno znacajnije iskonski razumjeti, nego znati kod napamet (ucenje napamet je obicno trosenje vremena koje se moze iskoristiti na usvajanje koncepata) jer se programiranje ne svodi na testove i same alate, koliko na sposobnost primjenjivanja znanja (znati koristiti cekic, ne znaci da znate napraviti kucu). Detalje ce pamtiti Google. Trik je znati gdje pronaci potrebne detalje i kako ih primjeniti, ali to je tema za drugi tekst.&lt;/p&gt;
&lt;div class=&quot;tip right-tip&quot; style=&quot;--span-row: 2;&quot;&gt;
&lt;blockquote cite=&quot;https://www.youtube.com/watch?v=cEBkvm0-rg0&quot;&gt;
 &lt;p&gt;Some people say a software engineer is just a professional Google searcher 💼. Some developers are smart enough to know that memorizing every piece of information can be a waste of time. It&#39;s more efficient to just google the information you need on demand.
 &lt;a target=&quot;_blank&quot; href=&quot;https://www.youtube.com/watch?v=cEBkvm0-rg0&quot;&gt;&lt;cite class=&quot;by&quot;&gt;Fireship&lt;/cite&gt;&lt;/a&gt;
 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;p&gt;Da se vratimo na komentarisanje koda. Komentari su dijelovi teksta koje racunar ignorise prilikom interpretiranja koda. Oni sluze programerima i prikazani su samo unutar programskog okruzenja, ali ne i na web stranici. Komentarisanje nije neophodno, medjutim  postoji vise razloga zasto bi neko komentarisao kod. Komentari su inace temelj dobre &lt;em&gt;komunikacije i dokumentacije&lt;/em&gt;. Oni olaksavaju radni tok medju programerima koji rade na istom projektu i objasnjavaju dijelove koda. Mogu koristiti i kao pocetna osnova za pravu dokumentaciju koja ce sluziti krajnjim korisnicima.&lt;/p&gt;
&lt;p&gt;Sa druge strane, upotreba komentara ne mora biti vrijedna samo u profesionalnom smislu iskusnim programerima. &lt;!-- Programer moze sebi ostaviti podsjetnik sta je potrebno uraditi naknadno ili koji kod izaziva gresku, moze blize objasniti i rasclaniti zadatak na manje korake. TODO: more about commenting code : https://en.wikipedia.org/wiki/Comment_(computer_programming)--&gt;&lt;br /&gt;
Kroz odgovaranje na pitanja poput &amp;quot;Sta rade ove instrukcije?&amp;quot; ili &amp;quot;Zasto je vazan ovaj korak?&amp;quot; se daje jasniji kontekst kako radi kod. Komentari dobijaju ulogu biljezaka na marginama. Ovakva primjena komentara uslovljava pocetnika da razumije i usvaja materijal. To je najveci poticaj da komentarisete od pocetka. Kada osjetite da pretjerano komentarisete, vjerovatno ne komentarisete dovoljno. &lt;strong&gt;Pretjerujte. Objasnite svaku linija koda i sta one rade.&lt;/strong&gt; Nije vazno da li ste vi napisali tu liniju ili je kopirali sa Stack Overflowa.&lt;/p&gt;
&lt;p&gt;Sticanjem iskustva ce se ovo smanjiti jer cete prirodno prepoznati sta jeste potrebno komentarisati i dalje, a sta nije. U toku stvaranja ove navike izgradicete jednu od vaznih vrlina kvalitetnog programera i nauciti jasnije komunicirati kroz komentare.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;/*&lt;br /&gt;&#39;document&#39; object lets &lt;br /&gt;JavaScript access any element &lt;br /&gt;in an HTML page.&lt;br /&gt;&#39;getElementById(id)&#39; method &lt;br /&gt;finds an element by element id.&lt;br /&gt;&#39;innerHTML&#39; sets or returns the &lt;br /&gt;HTML content of an element.&lt;br /&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Will change the heading with id = &quot;h&quot;&lt;/span&gt;&lt;br /&gt;document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;h&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;innerHTML &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Novi naslov&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Will change the paragraph with id = &quot;p&quot;&lt;/span&gt;&lt;br /&gt;document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;p&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;innerHTML &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Ovo je tekst paragrafa.&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Jos jedna aktivnost koja moze odmjeniti klasicne biljeske je &lt;em&gt;pisanje dokumentacije&lt;/em&gt; i &lt;code&gt;README.md&lt;/code&gt; fajla u sklopu svakog projekta. &lt;code&gt;README.md&lt;/code&gt; je uvodni tekst kroz koji korisnici upoznaju projekat. To je tekstualni fajl sa informacijama o aplikaciji ili kodu. Moze sadrzavati kratko objasnjenje motivacije iza stvaranja i odrzavanja projekta, odnosno zasto on postoji, instrukcije kako pokrenuti isti projekat na svom racunaru, kako koristiti aplikaciju, detalje o azuriranjima i sve ono sto bi korisnik trebao znati.&lt;/p&gt;
&lt;p&gt;Pocetnici obicno ne rade kompleksnije projekte i ne trebaju mnogo toga objasniti, sto je i razlog zasto je tada jednostavnije poceti. Mozete objasniti svrhu aplikacije, postaviti snimak ekrana kako ona izgleda, navesti koje tehnologije ste koristili, integrisane funkcionalnosti itd. Za inspiraciju procitajte druge dokumentacije ili clanak sa smjernicama koji je namjenjen pocetnicima.&lt;/p&gt;
&lt;figure class=&quot;wide-img&quot;&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/readme.jpg&quot; alt=&quot;Keyboard scheme - which finger should trigger which key.&quot; /&gt; 
 &lt;figcaption&gt;`README.md` fajl za &lt;a target=&quot;_blank&quot; href=&quot;https://github.com/danurbanowicz/eleventy-netlify-boilerplate#readme&quot;&gt;Eleventy Netlify Boilerplate&lt;/a&gt; na GitHubu.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;code&gt;.md&lt;/code&gt; esktenzija u nazivu fajla oznacava &amp;quot;Markdown documentation&amp;quot;. To je jednostavan jezik za oznacavanje sadrzaja koji se lako pretvara u tekst. Za pisanje &lt;code&gt;README.md&lt;/code&gt; fajla je potrebno nauciti Markdown sto se moze izvesti za sat ili dva. Potrazite tutorijal ili &lt;a target=&quot;_blank&quot; href=&quot;https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet&quot;&gt;Markdown Cheatsheet&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Komentarisanje koda i pisanje dokumentacije su navike na kojima cete biti zahvalni, a cijenice ih buduce kolege i poslodavci. I (ako smijem da sugerisem) &lt;strong&gt;nemojte ih zaboraviti u projektima u porfoliju!&lt;/strong&gt; Dokumentacija objasnjava vas projekat, a komentari linije koda.&lt;/p&gt;
&lt;p&gt;Biljeske i dalje mogu biti korisne u &lt;i&gt;specificnim&lt;/i&gt; situacijama. Na primjer, ukoliko ne mozete usvojiti nesto sto vam uporno zatreba ili za organizaciju zadataka. Ako se nesto moze lako pronaci na internetu obicno nije vrijedno zapisivanja jer te biljeske vjerovatno nece biti ponovo koristene.&lt;/p&gt;
&lt;h2 id=&quot;pauze&quot;&gt;Pauze&lt;/h2&gt;
&lt;p&gt;Za optimalniji efekat ne treba podcjeniti vaznost redovnih pauza kako bi se mozak oporavio. Cilj je raditi pametnije umjesto teze.&lt;/p&gt;
&lt;p&gt;Aktivno ucenje bez pauza gubi ucinak jer kognitivne mogucnosti opadaju, fokus se ne moze odrzati duzi vremenski period i &lt;em&gt;kvalitet sesije ucenja se smanjuje&lt;/em&gt;. Ucenje programiranja nije sprint, vec maraton i vazno je uvjeriti se da je sistem usvajanja vjestine odrziv na duzi period. Sa druge strane, mozak radi i kada se odmara. Znanje i materijal na koji je do skoro bio fokusiran se u ovoj fazi utemeljuje.&lt;/p&gt;
&lt;p&gt;Kvalitet sesija se moze povecati kroz flow stanje u kojim pauze igraju znacajnu ulogu.&lt;/p&gt;
&lt;h3 id=&quot;flow&quot;&gt;Flow&lt;/h3&gt;
&lt;p&gt;Flow je &lt;em&gt;izrazito prijatno i optimalno psiholosko stanje&lt;/em&gt; koje ljudi postizu kada su potpuno zaokupljeni nekim zadatkom. U toku ovog stanja zaboravljaju na sve osim zadatka i aktivnost je prilicno ispunjavajuca, sto znaci da ce osoba biti sklona ponavljanju aktivnosti.&lt;/p&gt;
&lt;p&gt;Nije ga lako postici u pocetku, posebno tokom pasivnog nacina ucenja. Obicno se postize u toku aktivne primjene znjanja (npr. pisanje koda). Potreban je unaprijed ulozen napor i desice se sa vremenom, ali to ne znaci da flow stanje treba biti krajnji cilj. Previse ulozenog napora i forsiranje ce paradoksalno uciniti postizanje flowa tezim.&lt;/p&gt;
&lt;p&gt;Dobra strategija je uciti kroz kratke sesije sa intenzivnim fokusom i pauzama izmedju, naspram dugih sesija slabijeg intenziteta. Neke okvirne smjernice za postizanje ovog stanja:&lt;/p&gt;
&lt;span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Ukloniti sve sto moze ugroziti stanje dubokog fokusa&lt;/strong&gt;. Npr. raditi u prostoriji koja sluzi samo za ucenje i maksimalno minimizuje distrakcije, biti nedostupan za druge, ugasiti sva nepotrebna obavjestenja itd.&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;i&quot;&gt;Postaviti tajmer za pocetak i kraj sesije.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Sesije od 25 - 90 minuta u kojima je strogo zabranjen multitasking. Fokus je na jednom zadatku.&lt;/li&gt;
&lt;li&gt;Pauze u ovisnosti od sistema i duzine sesije (npr. sesija 25 - pauza 5, sesija 50 - pauza 10 minuta). Slusajte tijelo i prilagodite sistem sebi. Fizicka promjena lokacije, setnja, uzivanje u suncu, razgovor sa nekim u toku pauze djelotvornije puni baterije od koristenja elektricnih uredjaja.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;&lt;span class=&quot;i&quot;&gt;Odrediti izrazito specifican rezultat ili ishod za svaku sesiju&lt;/span&gt;, recimo kreiranje jednog malog dijela funkcionalnosti. Dobro razmislite sta zelite postici u toku kako bi optimalno iskoristili vrijeme i sprijecili da um odluta. Odredjivanje cilja omogucava pracenje i osjecaj napredovanja.&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;i&quot;&gt;Vjezba, vjezba, vjezba&lt;/span&gt;. Sto vise vjezbate aktivnost, to ce ona donositi vise zadovoljstva. &lt;b&gt;Sa dozom zadovoljstva, izazova i zanimljivosti se povecava i vjerovatnoca postizanja flow stanja&lt;/b&gt;.&lt;br /&gt;
&lt;/li&gt;&lt;/ol&gt;&lt;/span&gt;

&lt;p&gt;Tekst na temu &lt;a href=&quot;https://webdevlpr.com/posts/promisljeno-vjezbanje/&quot;&gt;promisljenog/namjernog vjezbanja&lt;/a&gt; ima poveznice. Post je odvojen jer radi kao cjelina, ali u njemu pise i vise o efektnijem vjezbanju, fokusu, oporavku itd.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Sta je web sajt?</title>
    <link href="https://webdevlpr.com/posts/sta-cini-web-sajt/"/>
    <id>https://webdevlpr.com/posts/sta-cini-web-sajt/</id>
    <updated>2022-02-23T19:33:53Z</updated>
    <summary>Cilj je prikazati kako moze izgledati struktura jednostavnijeg sajta i koncept sadrzaja koji ga cini (HTML, CSS, JS, slike, organizacija foldera i imenovanje fajlova).</summary>
    <content type="html">&lt;p&gt;Tekst je namjenjen laicima koji otprilike zanima kako izgleda struktura jednostavnijeg sajta i koncept sadrzaja koji ga cini. Sve navedeno u ovom dijelu teksta je jednostavno savladati kroz ucenje HTML, CSS i JavaScript jezika.&lt;/p&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 2;&quot;&gt;Post je nastao kao dio teksta iz &lt;a target=&quot;_blank&quot; href=&quot;https://webdevlpr.com/posts/frontend-vodic-za-ucenje/&quot;&gt;Frontent - vodic za ucenje&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Sajt je neki broj fajlova sa kodom, stilovima, medijskim sadrzajem itd. Da bi ti fajlovi djelovali kao cjelina neophodno je sastaviti ih u logicnu i povezanu strukturu kako bi bili svjesni ostalog sadrzaja sa kojim treba komunicirati. Proces izgradnje sajta se izvrsava na &lt;i&gt;lokalnom kompjuteru&lt;/i&gt; da bi se uvjerili da web stranica izgleda i radi ispravno prije nego se otpremi na server.&lt;br /&gt;
Fajlovi koji cine web stranicu bi trebali biti organizovani u zajednickom folderu, a folder moze biti smjesten bilo gdje na lokalnom racunaru (recimo Desktopu da bi ga bilo jednostavno pronaci i pretpostavicemo da je folder nazivan &amp;quot;project&amp;quot;).&lt;/p&gt;
&lt;p&gt;Pogledacemo pojedinacne segmente koji najcesce cine web stranicu.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;index.html&lt;/code&gt; fajl koji ukljucuje&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;stilove,&lt;/li&gt;
&lt;li&gt;skripte i&lt;/li&gt;
&lt;li&gt;slike.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;index.html-kao-pocetna-web-stranica&quot;&gt;&lt;code&gt;index.html&lt;/code&gt; kao pocetna web stranica&lt;/h2&gt;
&lt;p&gt;Svaka web stranica na sajtu bi trebala imati .html dokument koji je predstavlja. Recimo, web stranicu &amp;quot;O nama&amp;quot; je moguce nazvati &lt;code&gt;o-nama.html&lt;/code&gt;, a &amp;quot;Kontakt&amp;quot; &lt;code&gt;kontakt.html&lt;/code&gt;. Dok se &lt;code&gt;index.html&lt;/code&gt; dokument najcesce koristi kao ime za pocetnu stranicu (home) i web pregledac je prvu interpretira ukoliko u URL adresi nije naznaceno da klijent trazi neki odredjeni dokument (&lt;code&gt;nekisajt.ba&lt;/code&gt; ce prikazati index.html, a &lt;code&gt;nekisajt.ba/kontakt.html&lt;/code&gt; kontakt stranicu).&lt;/p&gt;
&lt;p&gt;U pocetnoj (&lt;code&gt;index.html&lt;/code&gt;) stranici se moze kreirati meni sa vezama koje vode ka &lt;code&gt;o-nama.html&lt;/code&gt; i &lt;code&gt;kontakt.html&lt;/code&gt;. Web je ipak mreza HTML dokumenata sa vezama koje dalje vode na druge HTML dokumente i web stranice.&lt;/p&gt;
&lt;p&gt;.html ekstenzija govori da se radi o dokumentu koji sadrzi &lt;i&gt;Hypertext Markup Language&lt;/i&gt; (HTML), jezik koji se koristi za kodiranje &lt;i&gt;strukture&lt;/i&gt; web stranice. &amp;quot;Hypertext&amp;quot; se odnosi na &lt;i&gt;hiperveze&lt;/i&gt; i linkove koji se dodaju kroz HTML. &amp;quot;Markup Language&amp;quot; se odnosi na tagove kojim se definise struktura stranice i njen sadrzaj. Tagovi se obicno sami opisuju i intuitivni su. Izgledaju otprilike ovako:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;img&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;img/logo.jpg&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Pocetna stranica&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Ovdje mozete procitati sve o nasoj web stranici.&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;o-nama.html&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;O nama&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;kontakt.html&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Kontakt&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 2;&quot;&gt;
  Ukoliko ne postoji fajl na koji &lt;i&gt;src&lt;/i&gt; ili &lt;i&gt;href&lt;/i&gt; atribut vode, ta slika ili veza nece raditi.&lt;br /&gt;&lt;br /&gt;
  &lt;i&gt;h1&lt;/i&gt; je naslov ili header najviseg nivoa. &lt;i&gt;p&lt;/i&gt; oznacava paragraf. &lt;i&gt;a&lt;/i&gt; predstavlja vezu.
&lt;/p&gt; 
&lt;p&gt;Sto web pregledac interpretira ovako:&lt;/p&gt;
&lt;figure style=&quot;max-width: 400px;&quot;&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/html-osnove.jpg&quot; alt=&quot;Web stranica izradjena samo sa HTML elementima&quot; /&gt;  
 &lt;!-- &lt;figcaption&gt;Web stranica izradjena samo sa HTML elementima.&lt;/figcaption&gt; --&gt;
&lt;/figure&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 2;&quot;&gt;Ne izgleda magicno, ali &lt;i&gt;HTML definise samo strukturu i znacenje sadrzaja&lt;/i&gt;.&lt;/p&gt;
&lt;h2 id=&quot;folder-sa-stilovima&quot;&gt;Folder sa stilovima&lt;/h2&gt;
&lt;p&gt;Je folder sa CSS (&lt;i&gt;Cascading Style Sheets&lt;/i&gt;) fajlovima koji sadrze CSS kod za &lt;i&gt;stilizovanje sadrzaja&lt;/i&gt; (poput izbora fonta i velicine slova, boja, razmaka, animacija, pozicije elementa itd.). Sledeci primjer prikazuje kako naslov &lt;code&gt;&amp;lt;h1&amp;gt;Pocetna stranica&amp;lt;/h1&amp;gt;&lt;/code&gt; iz prikazanog &lt;code&gt;index.html&lt;/code&gt; koda obojiti u ljubicasto.&lt;/p&gt;
&lt;pre class=&quot;language-css&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;h1&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; purple&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sada je potrebno &lt;code&gt;index.html&lt;/code&gt; dokumentu pokazati gdje se nalazi CSS kod kako bi se on primjenio na toj stranici. Recimo da je ovaj CSS kod sacuvan u fajlu sa nazivom &lt;code&gt;style.css&lt;/code&gt;, da se folder sa stilovima naziva &lt;code&gt;styles&lt;/code&gt; i da smo ih ovako organizovali:&lt;/p&gt;
&lt;figure style=&quot;max-width: 400px;&quot;&gt;
  &lt;img src=&quot;https://webdevlpr.com/static/img/struktura-1.png&quot; alt=&quot;Struktura fajlova. Folder &#39;projekat&#39; sadrzi index.html i jos jedan folder sa nazivom &#39;styles&#39; u kom se nalazi style.css.&quot; /&gt; 
 &lt;figcaption&gt;Raspored foldera i fajlova unutar glavnog foldera &quot;project&quot;.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Sa &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; elementom u zaglavlju HTML stranice se moze naznaciti put do &lt;code&gt;style.css&lt;/code&gt; kroz &lt;code&gt;href&lt;/code&gt; atribut :&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;link&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;styles/style.css&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;stylesheet&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;link&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;styles/style.css&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;stylesheet&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- Sadrzaj &amp;lt;h1&gt; &amp;lt;p&gt; &amp;lt;img&gt; --&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 2;&quot;&gt;
  &lt;i&gt;html&lt;/i&gt; tagovi oznacavaju pocetak i kraj HTML koda, odnosno on sadrzi sve ostale HTML elemente.
  Sadrzaj izmedju &lt;i&gt;head&lt;/i&gt; tagova opisuje HTML dokument i ne prikazuje se na web stranici.
  Unutar &lt;i&gt;body&lt;/i&gt; tagova se nalazi sav prikazani sadrzaj na web stranici (naslovi, paragrafi, slike, veze, tabele, liste itd.).
&lt;/p&gt; 
&lt;p&gt;HTML i CSS nisu programski jezici i lako je savladati osnove.&lt;/p&gt;
&lt;h2 id=&quot;folder-sa-skriptama&quot;&gt;Folder sa skriptama&lt;/h2&gt;
&lt;p&gt;Ovaj folder je namjenjen fajlovima sa skriptnim kodom poput JavaScripta i najcesce koristi se za dodavanje interaktivnog aspekta web stranici (dodavanje HTML elemenata, izmjenu postojeceg sadrzaja, promjenu stilova, reagovanje na radnje korisnika poput pomjeranje misa, klik, pritisak tipke na tastaturi, slanje zahtjeva serveru, upravljanje kolacicima, postavljanje pitanja korisniku, pamcenje podataka u lokalnom skladistu itd.). Medjutim, JavaScript omogucava i kreiranje servera, mobilnih aplikacija itd.&lt;/p&gt;
&lt;p&gt;JavaScript kao najpopularniji programski jezik weba otkljucava nove dimenzije kreativnosti i moci, ali je i izazovniji za savladati. Medjutim, karakteristike JavaScripta su slicne drugim programskim jezicima i poznavanje njegovih osnova olaksava ucenje drugih. Ono sto JavaScript cini jedinstvenom je:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Potpuna integracija sa HTML/CSS&lt;/li&gt;
&lt;li&gt;Proste stvari je jednostavno izvesti&lt;/li&gt;
&lt;li&gt;Podrzavaju je svi bolji pretrazivaci - sto je razlog jer je najrasprostranjeniji alat na webu&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sa sledecim kodom mozemo izmijeniti sadrzaj &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; naslova iz teksta &amp;quot;Pocetna stranica&amp;quot; u &amp;quot;Dobrodosli!&amp;quot;:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; naslov &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;querySelector&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;h1&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;naslov&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;textContent &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Dobrodosli!&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;querySelector()&lt;/code&gt; u ovom slucaju &amp;quot;selektuje&amp;quot; &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; element, sto je slicno onome sto je uradjeno u CSS kodu. Prvo je izabran element na koji treba primjeniti kod i potom su navedene instrukcije.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; element je smjesten u varijablu pod nazivom &amp;quot;naslov&amp;quot; da ne bi svaki put ponavljali isti dio koda. Varijabla je nadovezana na &lt;code&gt;textContent&lt;/code&gt; koji predstavlja sadrzaj naslova, te je znakom jednakosti odredjena nova vrijednost sadrzaja iako u HTML dokumentu pise nesto potpuno drugo.&lt;/p&gt;
&lt;p&gt;Medjutim, HTML dokument nije svjestan ovog koda. Da bi ga pronasao trebamo mu ukazati na to da postoji JavaScript fajl (sa .js ekstenzijom) i gdje. Recimo da je naziv fajla &lt;code&gt;main.js&lt;/code&gt;, a naziv foldera sa skriptama &lt;code&gt;scripts&lt;/code&gt;.&lt;/p&gt;
&lt;figure style=&quot;max-width: 400px;&quot;&gt;
  &lt;img src=&quot;https://webdevlpr.com/static/img/struktura-2.png&quot; alt=&quot;Struktura fajlova. Folder &#39;projekat&#39; sadrzi index.html i jos jedan folder sa nazivom &#39;styles&#39; u kom se nalazi style.css.&quot; /&gt; 
 &lt;figcaption&gt;Raspored foldera i fajlova unutar glavnog foldera &quot;project&quot;.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Kroz &lt;code&gt;&amp;lt;scripts&amp;gt;&lt;/code&gt; tag mozemo HTML dokumentu reci da se radi o skriptnom jeziku, a kroz &lt;code&gt;src&lt;/code&gt; atribut gdje je smjesten kod koji treba primjeniti na web stranicu.&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;scripts/main.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;scripts&amp;gt;&lt;/code&gt; moze biti smjesten i u zaglavlju (unutar &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; taga) i u tijelu (unutar &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; elementa). Cesto se postavlja tik prije zatvaranja &lt;code&gt;&amp;lt;/body&amp;gt;&lt;/code&gt; taga.&lt;/p&gt;
&lt;h2 id=&quot;folder-sa-slikama&quot;&gt;Folder sa slikama&lt;/h2&gt;
&lt;p&gt;Ovaj folder je namijenjen za slike koje se koriste na sajtu. Vec smo ukljucili sliku i folder u primjerima iznad. Slike se u HTML jeziku dodaju sa tagom &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; a put do slike u &lt;code&gt;src&lt;/code&gt; atribut:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;img&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;img/logo.jpg&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;figure style=&quot;max-width: 400px;&quot;&gt;
  &lt;img src=&quot;https://webdevlpr.com/static/img/struktura-3.png&quot; alt=&quot;Struktura fajlova. Folder &#39;projekat&#39; sadrzi index.html i jos jedan folder sa nazivom &#39;styles&#39; u kom se nalazi style.css.&quot; /&gt; 
 &lt;figcaption&gt;Raspored foldera i fajlova unutar glavnog foldera &quot;project&quot;.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Nije neophodno podijeliti fajlove kao u iznad prikazanom primjeru, ali su projekti obicno kompleksniji i preporucljivo je organizovati fajlove. Nacin na koji se ti fajlovi uvrstavaju u HTML dokument je definisan i nije proizvoljan. Neophodno je uvrstiti tacan tag, atribut i put do fajla.&lt;/p&gt;
&lt;h2 id=&quot;imenovanje-fajlova-i-foldera&quot;&gt;Imenovanje fajlova i foldera&lt;/h2&gt;
&lt;p&gt;Foldere i fajlove je preporucljivo imenovati &lt;i&gt;malim slovima&lt;/i&gt; jer su mnogi racunari i serveri osjetljivi na velika i mala slova. To znaci da prave razliku izmedju njih i da &lt;code&gt;index.html&lt;/code&gt; i &lt;code&gt;InDeX.html&lt;/code&gt; za njih nije isti fajl.&lt;/p&gt;
&lt;p&gt;Najbolja praksa je &lt;i&gt;razdvajati rijeci sa crticom (-)&lt;/i&gt; umjesto razmaka jer ih web pregledaci, serveri i programski jezici ne interpretiraju dosljedno. Neki sistemi ovaj razmak tretiraju kao da se radi o dva razlicita fajla, a vecina servera ce na mjesto razmaka staviti &amp;quot;%20&amp;quot; (kod za razmak: &lt;a target=&quot;_blank&quot; href=&quot;https://www.w3schools.com/tags/ref_urlencode.asp&quot;&gt;URL Encoding&lt;/a&gt;) ili &amp;quot;+&amp;quot; znak. Google crticu vidi kao karakter koji razdvaja rijeci sto je razlog vise da se koristi umjesto donje crte (_).&lt;/p&gt;
&lt;p&gt;Dobar primjer: &lt;code&gt;o-nama.html&lt;/code&gt;.&lt;/p&gt;
&lt;!-- ## Dodatni izvori --&gt;
</content>
  </entry>
  
  <entry>
    <title>Osnove HTTP protokola</title>
    <link href="https://webdevlpr.com/posts/osnove-http-protokola/"/>
    <id>https://webdevlpr.com/posts/osnove-http-protokola/</id>
    <updated>2022-02-16T19:33:53Z</updated>
    <summary>HTTP je temelj Word Wide Weba i komunikacijski protokol pomocu kojeg je moguce povezati se sa serverima sirom svijeta. Ovdje cete se sresti sa HTTP zahtjevima i odgovorima, verzijama, metodama, kolacicima, proksijima, TCP vezom i ostalim slojevima kroz koje putuje HTTP poruka.</summary>
    <content type="html">&lt;p&gt;Hypertext Transfer Protocol je temelj Word Wide Weba i &lt;i&gt;komunikacijski protokol&lt;/i&gt; pomocu kojeg je moguce povezati se sa serverima sirom svijeta.&lt;br /&gt;
Primarna funkcija HTTP protokola je da uspostavi vezu sa serverom, trazi sve potrebne informacije za prikaz web stranice i preuzme odgovor od servera.&lt;/p&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 2;&quot;&gt;Ovaj post je nastavak teksta &lt;a href=&quot;https://webdevlpr.com/posts/kako-radi-web/&quot;&gt;Kako radi web?&lt;/a&gt;.&lt;/p&gt;
&lt;figure style=&quot;max-width: 400px&quot;&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/url-http.png&quot; alt=&quot;URL adresa sa naglasenim HTTP protokolom prije ostatka adrese.&quot; /&gt; 
 &lt;figcaption&gt;HTTP protokol u URL adresi.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://webdevlpr.com/posts/kako-rade-internet-i-web#url-adresa&quot;&gt;URL adresa&lt;/a&gt; identifikuje sa kojim serverom klijent zeli komunicirati, ali ne govori i sta se od njega trazi. Zato web pregledac salje &lt;i&gt;zahtjeve&lt;/i&gt; kroz HTTP poruke, a HTTP protokol definise jezik izmedju &lt;a target=&quot;_blank&quot; href=&quot;https://webdevlpr.com/posts/kako-rade-internet-i-web#klijent-i-server&quot;&gt;klijenta i servera&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Kroz HTTP poruku klijent (web pregledac) naglasava kakvu reprezentaciju i u kom obliku zeli sadrzaj, kao i klijentovu namjeru (da cita, modifikuje, brise itd.). HTTP poruka je jednostavna tekstualna poruka koja moze biti zahtjev (request) od klijenta ili odgovor (response) od servera:&lt;br /&gt;
&lt;i&gt;Zahtjev&lt;/i&gt; sadrzi HTTP metodu (&lt;code&gt;GET&lt;/code&gt;, &lt;code&gt;POST&lt;/code&gt;, &lt;code&gt;Put&lt;/code&gt;, &lt;code&gt;DELETE&lt;/code&gt;..) koja serveru govori sta klijent zeli da uradi, gdje se nalazi zeljeni sadrzaj i zaglavlja koja daju dodatne podatke o sadrzaju koji se trazi kao i vise informacija o samom klijentu.&lt;br /&gt;
&lt;i&gt;Odgovor&lt;/i&gt; ukljucuje statusni kod o uspjesnosti realizacije zahtjeva, zaglavlja sa dodatnim korisnim informacijama o odgovoru i sadrzaj odgovora.&lt;/p&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 2;&quot;&gt;Zvuci apstraktno i zato su u nastavku teksta prikazani prakticni primjeri HTTP poruka i njihova objasnjenja.&lt;/p&gt;
&lt;p&gt;HTTP ima definisan format koji odredjuje strukturu zahtjeva, kao i sve neophodne informacije da bi server shvatio sta se od njega trazi. Zato pri pretrazi naziva domene veb pregledac sam dopuni &lt;code&gt;http://&lt;/code&gt; protokol u URL adresi ukoliko on nedostaje.&lt;/p&gt;
&lt;p&gt;HTTP je i ujedno protokol bez stanja (&lt;i&gt;stateless&lt;/i&gt;), odnosno protokol koji ne odrzava konstantnu vezu izmedju klijenta i servera, vec se svaki upuceni zahtjev posmatra odvojeno. To znaci da server ne moze pratiti stanja i informacije o klijentu izvan tog zahtjeva, te da svaki zahtjev mora sadrzavati neophodne informacije potrebne za njegovo izvrsenje.&lt;/p&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 2;&quot;&gt;Ukoliko je neophodno kontinuirano cuvati podatke o nekom &lt;i&gt;stanju&lt;/i&gt; (npr. da je korisnik prijavljen), moguce je koristiti lokalno skladiste (Local Storage), kolacice (Cookies), sesije (Sessions) itd.&lt;/p&gt;
&lt;p&gt;3 faze standardne HTTP sesije izgledaju ovako:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Klijent uspostavi TCP vezu sa serverom&lt;/li&gt;
&lt;li&gt;Klijent salje zahtjev i ceka odgovor&lt;/li&gt;
&lt;li&gt;Server obradjuje zahtjev i salje odgovor sa statusnim kodom o uspjesnosti obrade&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dalje u tekstu su detaljnije objasnjene HTTP verzije, HTTP metode, HTTP zahtjev i odgovor, HTTP zaglavlje i podjela, proxy, kesiranje, kolacici, TCP veza, HTTPS, alati za pracenje HTTP saobracaja i HTTP statusni kodovi.&lt;/p&gt;
&lt;h2 id=&quot;http-verzije&quot;&gt;HTTP verzije&lt;/h2&gt;
&lt;p&gt;Nekada je za prikaz web stranice bilo dovoljno preuzeti jedan dokument. Danas mnogi sajtovi zahtijevaju vise od jednog fajla za prikaz stranice. Kada bi web pregledaci uspostavili konekciju i cekali da se preuzme jedan fajl da bi poceo preuzimati drugi, proces bi uzimao vise vremena.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;HTTP/2.0&lt;/i&gt; omogucava klijentu da zahtjeve salje istovremeno. Ova tehnika je poznata kao multipleksiranje i smanjuje vrijeme potrebno za ucitavanje stranice.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;HTTP/1.1&lt;/i&gt; dozvoljava samo jedan istovremeni zahtjev. &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/http1-vs-http2.jpg&quot; alt=&quot;HTTP/1.1 and HTTP/2 comparison. HTTP/2 is more efficient.&quot; /&gt; 
 &lt;figcaption&gt;Poredjenje efikasnosti HTTP/1.1 i HTTP/2 protokola.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Na slici iznad vidimo da je klijent prvo trazio &lt;code&gt;index.html&lt;/code&gt; kroz HTTP zahtjev. Server je poslao &lt;code&gt;200 OK&lt;/code&gt; i trazeni fajl u odgovoru. Web pregledac potom rasclanjuje kod &lt;code&gt;index.html&lt;/code&gt; fajla koji ukljucuje &lt;code&gt;style.css&lt;/code&gt; i &lt;code&gt;script.js&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;link&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;stylesheet&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;/style.css&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;/script.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sto znaci da su &lt;code&gt;style.css&lt;/code&gt; i &lt;code&gt;script.js&lt;/code&gt; potrebni za prikaz stranice, te je klijent u prvom primjeru (primjer rada HTTP 1.1 protokola) poslao zahtjev za preuzimanje &lt;code&gt;style.css&lt;/code&gt; i nakon sto mu je server dostavio fajl, poslao je jos jedan zahtjev za &lt;code&gt;scripts.js&lt;/code&gt;.&lt;br /&gt;
U drugom primjeru (primjer rada HTTP 2 protokola) je poslao oba zahtjeva istovremeno, smanjio broj koraka i ubrzao prikazivanje stranice.&lt;/p&gt;
&lt;h2 id=&quot;http-metode&quot;&gt;HTTP metode&lt;/h2&gt;
&lt;p&gt;Navedene su HTTP metode koje se najcesce primjenjuju, ali nisu ogranicene na njih.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;GET&lt;/i&gt; dobija podatke od servera da bi ih klijent citao. U ovakvom zahtjevu URL bi trebao nositi sve informacije koje su potrebne serveru da bi pronasao trazeni sadrzaj. Primjer &lt;code&gt;https://nekisajt.ba/&lt;/code&gt;&lt;b&gt;&lt;code&gt;pretraga?trazi=web+development&amp;amp;poredaj=najnovije&lt;/code&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;POST&lt;/i&gt; salje nove podatke serveru.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;PUT&lt;/i&gt; modifikuje vec postojece podatke na serveru.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;DELETE&lt;/i&gt; brise postojece podatke sa servera.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;http-zahtjev&quot;&gt;HTTP zahtjev&lt;/h2&gt;
&lt;p&gt;HTTP zahtjev je ona HTTP poruka koju klijent salje serveru i sastoji se od sledecih dijelova:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;Startna linija&lt;/i&gt; opisuje sta klijent trazi - sastoji se od HTTP metode, putanje i HTTP verzije: &lt;code&gt;GET /blog/index.html HTTP/1.1&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;Zaglavlje zahtjeva&lt;/i&gt; je parametar poruke - obicno ih ima vise i oni daju informacije o posiljaocu, nacinu na koji klijent zeli da komunicira i o samoj poruci&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Prazna linija - naznacuje da je zaglavlje zavrsilo i odvaja ga od tijela poruke.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;Tijelo poruke&lt;/i&gt; je sadrzaj poruke - opcionalan. U slucaju jednostavnijih zahtjeva je prazno. Npr. kada klijent trazi staticni sajt. Ukoliko trazi obradu podataka usljed podnosenja forme tijelo ce sadrzati podatke sa forme.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Primjer HTTP zahtjeva koji zeli dobiti (GET HTTP metoda) fajlove staticne stranice i nema potrebe dalje obradjivati bilo kakve podatke. Prva linija je startna linija koju smo pomenuli. Sve ostale su neki od mogucih parametara iz zaglavlja zahtjeva. U ovom slucaju tijelo nije potrebno.&lt;/p&gt;
&lt;pre class=&quot;language-http&quot;&gt;&lt;code class=&quot;language-http&quot;&gt;&lt;span class=&quot;token request-line&quot;&gt;&lt;span class=&quot;token method property&quot;&gt;GET&lt;/span&gt; &lt;span class=&quot;token request-target url&quot;&gt;/blog/index.html&lt;/span&gt; &lt;span class=&quot;token http-version property&quot;&gt;HTTP/1.1&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token header&quot;&gt;&lt;span class=&quot;token header-name keyword&quot;&gt;Host&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token header-value&quot;&gt;nekisajt.ba&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token header&quot;&gt;&lt;span class=&quot;token header-name keyword&quot;&gt;User-Agent&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token header-value&quot;&gt;Mozilla/4.0 (compatible; MSIE5.01; Windows NT)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token header&quot;&gt;&lt;span class=&quot;token header-name keyword&quot;&gt;Connection&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token header-value&quot;&gt;Keep-Alive&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token header&quot;&gt;&lt;span class=&quot;token header-name keyword&quot;&gt;Cache-Control&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token header-value&quot;&gt;no-cache&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token header&quot;&gt;&lt;span class=&quot;token header-name keyword&quot;&gt;Accept&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token header-value&quot;&gt;text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Medjutim ako je korisnik popunio i poslao formu kroz svoj web pregledac, on zapravo salje zahtjev serveru sa startnom linijom koja sadrzi metodu za slanje podataka (poput POST HTTP metode). U ovom primjeru postoji prazna linija i tijelo odvojeno od zaglavlja poruke. U tijelu vidimo informacije poslane kroz formu.&lt;/p&gt;
&lt;pre class=&quot;language-http&quot;&gt;&lt;code class=&quot;language-http&quot;&gt;&lt;span class=&quot;token request-line&quot;&gt;&lt;span class=&quot;token method property&quot;&gt;POST&lt;/span&gt; &lt;span class=&quot;token request-target url&quot;&gt;/test/demo_form.php&lt;/span&gt; &lt;span class=&quot;token http-version property&quot;&gt;HTTP/1.1&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token header&quot;&gt;&lt;span class=&quot;token header-name keyword&quot;&gt;Host&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token header-value&quot;&gt;nekisajt.ba&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;name1=John&amp;amp;name2=Doe&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;http-odgovor&quot;&gt;HTTP odgovor&lt;/h2&gt;
&lt;p&gt;Odgovor se sastoji od sledecih dijelova:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;Statusna linija&lt;/i&gt; je statusni kod koji pokazuje da li je zahtijev uspjesan (&lt;code&gt;200 OK&lt;/code&gt;) ili zasto nije. Ona takodje ukljucuje HTTP verziju i kratak opis statusa.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;Zaglavlje odgovora&lt;/i&gt; su dodatni podaci o tipu sadrzaja, informacije o serveru itd.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Prazna linija - naznacuje da je zaglavlje zavrsilo i odvaja ga od tijela poruke.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;Tijelo poruke&lt;/i&gt; je sadrzaj poruke - opcionalan. Na primjer, ovo moze biti HTML sadrzaj trazene web stranice, slika itd.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sledeci primjer je HTTP odgovor koji prikazuje stanje greske nakon sto server nije uspio pronaci trazenu web stranicu (404).&lt;/p&gt;
&lt;pre class=&quot;language-http&quot;&gt;&lt;code class=&quot;language-http&quot;&gt;&lt;span class=&quot;token response-status&quot;&gt;&lt;span class=&quot;token http-version property&quot;&gt;HTTP/1.1&lt;/span&gt; &lt;span class=&quot;token status-code number&quot;&gt;404&lt;/span&gt; &lt;span class=&quot;token reason-phrase string&quot;&gt;Not Found&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token header&quot;&gt;&lt;span class=&quot;token header-name keyword&quot;&gt;Date&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token header-value&quot;&gt;Sun, 18 Oct 2012 10:36:20 GMT&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token header&quot;&gt;&lt;span class=&quot;token header-name keyword&quot;&gt;Server&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token header-value&quot;&gt;Apache/2.2.14 (Win32)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token header&quot;&gt;&lt;span class=&quot;token header-name keyword&quot;&gt;Connection&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token header-value&quot;&gt;Closed&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token header&quot;&gt;&lt;span class=&quot;token header-name keyword&quot;&gt;Content-Type&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token header-value&quot;&gt;text/html; charset=iso-8859-1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;http-zaglavlje&quot;&gt;HTTP zaglavlje&lt;/h2&gt;
&lt;p&gt;Svaka informacija u zaglavlju je formatirana kao par koji ima &lt;code&gt;Ime-Zaglavlja: vrijednost&lt;/code&gt;. Na ovaj nacin HTTP protokol ukljucuje sve vazne informacije koje mogu koristiti klijentu i serveru. Zaglavlja se mogu podijeliti prema njihovom kontekstu:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;Generalna zaglavlja&lt;/i&gt; se mogu koristiti za pruzanje informacija o zahtjevu ili odgovoru, ali ne govore o samom sadrzaju poruke&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;Zaglavlja zahtjeva&lt;/i&gt; pruzaju dodatne podatke o zahtjevu i salje ih klijent&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;Zaglavlja odgovora&lt;/i&gt; pruzaju dodatne podatke o odgovoru i salje ih server&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;Zaglavlja entiteta&lt;/i&gt; se koriste da opisu sadrzaj poruke&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mogu se podijeliti i u &lt;i&gt;kategorije&lt;/i&gt; po: Authentication, Caching, Client hints, Device client hints, Conditionals, Connection management, Content negotiation, Controls, Cookies, CORS, Downloads, Message body information, Proxies, Redirects, Request context, Response context, Range requests, Security, Server-sent events, Transfer coding, WebSockets HTTP headers.&lt;/p&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 2;&quot;&gt;Opsirna &lt;i&gt;dokumentacija&lt;/i&gt; o zaglavljima po kategorijama na &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers#authentication&quot;&gt;developer.mozilla.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hajde da pogledamo kako izgledaju neka od osnovnih zaglavlja.&lt;/p&gt;
&lt;h3 id=&quot;autentifikacija&quot;&gt;Autentifikacija&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;WWW-Authenticate&lt;/code&gt; zaglavlje definise metodu autentifikacije koja se koristi da bi se pristupilo sadrzaju. Ono se salje u zaglavlju odgovora, odnosno server salje klijentu.&lt;br /&gt;
&lt;code&gt;Authorization&lt;/code&gt; zaglavlje sadrzi kredencijale za autentifikaciju korisnickog agenta. Klijent salje u zaglavlju HTTP zahtjeva kako bi dokazao da moze pogledati zasticeni sadrzaj.&lt;/p&gt;
&lt;h3 id=&quot;uslovi&quot;&gt;Uslovi&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Last-Modified&lt;/code&gt; zaglavlje predstavlja datum poslednje izmjene.&lt;br /&gt;
&lt;code&gt;ETag&lt;/code&gt; ili entity tag je identifikator verzije sadrzaja. U trenutku promjene sadrzaja &lt;code&gt;ETag&lt;/code&gt; vrijednost se mijenja. Ukoliko web pregledac uporedi vrijednosti verzije koju ima u kesu i vrijednost verzije sadrzaja koju ima server, moze odluciti da li ima potrebe da zahtijeva i preuzme novi sadrzaj ili ce prikazati onaj koji je sacuvan.&lt;br /&gt;
&lt;code&gt;If-Match&lt;/code&gt; zaglavlje cini zahtjev uslovnim jer zeli potvrditi da li se poklapa sa drugim entity tagom.&lt;br /&gt;
&lt;code&gt;If-None-Match&lt;/code&gt; zahtjev uslovljava i primjenjuje metodu samo ako se kesirani sadrzaj ne poklapa ni sa jednim entity tagom.&lt;/p&gt;
&lt;h3 id=&quot;upravljanje-vezom&quot;&gt;Upravljanje vezom&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Connection&lt;/code&gt; zahtjev kontrolise hoce li mrezna veza ostati otvorena nakon sto se zavrsi trenutna transakcija izmedju servera i klijenta.&lt;br /&gt;
&lt;code&gt;Keep-Alive&lt;/code&gt; zahtjev kontrolise koliko dugo veza treba ostati otvorena.&lt;/p&gt;
&lt;h3 id=&quot;pregovaranje-o-sadrzaju-(content-negotiation)&quot;&gt;Pregovaranje o sadrzaju (Content Negotiation)&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Accept&lt;/code&gt; zaglavlje obavjestava server o vrstama podataka koji se mogu poslati nazad.&lt;br /&gt;
&lt;code&gt;Accept-Language&lt;/code&gt; zaglavlje obavjestava server da klijent npr. prihvata spanski jezik. Na serveru je da pokusa ispuniti zahtjev, sto ne znaci da hoce. Mozda posalje sadrzaj na engleskom.&lt;/p&gt;
&lt;p&gt;Ovo se smatra pregovaranjem. Pregovaranje o sadrzaju je nesto za sta tipicni korisnik ne mari, ali za web developere znaci potencijal da linijom koda usavrse uslugu koja ce dostaviti informaciju u idealnom formatu za klijenta ili korisnika.&lt;/p&gt;
&lt;h3 id=&quot;informacije-o-tijelu-poruke&quot;&gt;Informacije o tijelu poruke&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Content-Length&lt;/code&gt; zaglavlje govori o velicini tijela u bajtovima.&lt;br /&gt;
&lt;code&gt;Content-Type&lt;/code&gt; zaglavlje oznacava tip medija.&lt;br /&gt;
&lt;code&gt;Content-Language&lt;/code&gt; zaglavlje opisuje ljudski jezik koristen u sadrzaju.&lt;/p&gt;
&lt;h3 id=&quot;kontekst-zahtjeva&quot;&gt;Kontekst zahtjeva&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;From&lt;/code&gt;, &lt;code&gt;Host&lt;/code&gt;, &lt;code&gt;Referer&lt;/code&gt; i &lt;code&gt;User-Agent&lt;/code&gt; opisuju detalje o klijentu koji je pokrenuo zahtjev.&lt;/p&gt;
&lt;h2 id=&quot;proxy&quot;&gt;Proxy&lt;/h2&gt;
&lt;p&gt;Proxy je &lt;i&gt;posrednik izmedju klijenta i zeljenog servera&lt;/i&gt;. HTTP poruke ne idu direktno trazenom serveru ili klijentu ukoliko je prisutan posrednik. Proxy server presretne poruke i prosljedjuje ka finalnoj destinaciji. To takodje znaci da proxy moze manipulisati HTTP porukom, izmijeniti je, citati i zapisati sadrzaj.&lt;/p&gt;
&lt;p&gt;Proxy se moze koristiti za &lt;u&gt;pracenje saobracaja&lt;/u&gt; ili &lt;u&gt;blokiranje pristupa&lt;/u&gt; nekim sajtovima (npr. socijalnim mrezama), za &lt;u&gt;kompresiju sadrzaja&lt;/u&gt;, &lt;u&gt;anonimnost&lt;/u&gt; korisnika tako sto proxy server predstavlja sebe kao klijenta koji je napravio inicijalni HTTP zahtjev itd.&lt;br /&gt;
Proxy moze pomoci pri &lt;u&gt;uravnotezenju opterecenja servera&lt;/u&gt; tako sto prosljedjuje nove zahtjeve na onaj koji je najmanje opterecen u tom trenutku. SSL i &lt;u&gt;sifriranje HTTP poruka&lt;/u&gt; moze raditi proxy umjesto servera. &lt;u&gt;Proxy za kesiranje&lt;/u&gt; pohranjuje kopije sadrzaja kojima se cesto pristupa i moze da odgovara na takve HTTP zahtjeve direktno.&lt;/p&gt;
&lt;h2 id=&quot;kesiranje-(caching)&quot;&gt;Kesiranje (Caching)&lt;/h2&gt;
&lt;p&gt;Efikasnost web stranica se moze znacajno popraviti &lt;i&gt;ponovnom upotrebnom prethodno preuzetog sadrzaja&lt;/i&gt;. To znaci da server ne mora slati sadrzaj koji klijent vec ima. Iz ovog razloga kes smanjuje kasnjenje, potrosnju mreznog protoka i vrijeme za preuzimanje neophodnog sadrzaja za prikaz web stranice. Kada postoji vise zahtjeva za isti sadrzaj, server ga moze iznova i iznova slati. Alternativa je da se sadrzaj kesira na proxy serveru ili u lokalnom skladistu klijenta dok serveru ostaje prostor za bavljenje vaznijim obradama, a vrijeme za prikaz stranice djeluje znatno brze.&lt;/p&gt;
&lt;h3 id=&quot;dvije-vrste-kesa&quot;&gt;Dvije vrste kesa&lt;/h3&gt;
&lt;p&gt;&lt;i&gt;Javni&lt;/i&gt; ili &lt;i&gt;dijeljeni kes&lt;/i&gt; je onaj koji dijeli vise korisnika. Obicno se nalazi u kes memoriji proxy servera. Cesto se koristi za sadrzaj koji je popularan medju korisnicima. Na primjer, dobavljac internet usluga (Internet service provider ili ISP) moze imati proxy server kao dio svoje lokalne mreze da bi brze usluzio mnogobrojne korisnike popularnim sadrzajem bez nepotrebnog gusenja protoka.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Privatni kes&lt;/i&gt; je namjenjen jednom specificnom korisniku. Web pregledac uvijek drzi privatni kes (preuzete i privremeno cuvane fajlove) na korisnikovom sistemu. Ona je korisna, izmedju ostalog, pri navigaciji naprijed/nazad kroz posjecene web stranice. Sve sto je web pregledac sacuvao na sistemu se moze pojaviti skoro istog trenutka na ekranu.&lt;/p&gt;
&lt;h3 id=&quot;kada-kesirati-i-brisati-privremeno-pohranjen-sadrzaj%3F&quot;&gt;Kada kesirati i brisati privremeno pohranjen sadrzaj?&lt;/h3&gt;
&lt;p&gt;Ukoliko web pregledac ili proxy server dobije nov sadrzaj kao odgovor od servera, taj sadrzaj se automatski moze pohraniti. Medjutim, moguce je naglasiti da se nesto ne treba cuvati kroz HTTP zaglavlje &lt;code&gt;Cache-Control&lt;/code&gt; koje smo nesto prije pomenuli. &lt;code&gt;Expires&lt;/code&gt; i &lt;code&gt;Pragma&lt;/code&gt; su zaglavlja koja takodje kontrolisu istek nekog kesa iako su zvanicno zastarjela do HTTP 1.1. Ova zaglavlja su dostupna da bi bila kompatibilna sa starijim verzijama (backward compatibility).&lt;/p&gt;
&lt;p&gt;&lt;code&gt;public&lt;/code&gt;, &lt;code&gt;private&lt;/code&gt;, &lt;code&gt;no-cache&lt;/code&gt;, &lt;code&gt;no-store&lt;/code&gt;, &lt;code&gt;max-age&lt;/code&gt; su samo &lt;em&gt;neke&lt;/em&gt; od vrijednosti &lt;code&gt;Cache-control&lt;/code&gt; zaglavlja.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;public&lt;/code&gt;: sadrzaj &lt;i&gt;kesira proxy server&lt;/i&gt;.&lt;br /&gt;
&lt;code&gt;private&lt;/code&gt;: &lt;i&gt;web pregledac kesira&lt;/i&gt; sadrzaj.&lt;br /&gt;
&lt;code&gt;no-cache&lt;/code&gt;: sadrzaj ce se &lt;i&gt;pohraniti samo za validaciju&lt;/i&gt; sadrzaja. Klijent salje serveru sadrzaj za provjeru validnosti prije nego ga obrise.&lt;br /&gt;
&lt;code&gt;no-store&lt;/code&gt;: &lt;i&gt;ne treba pohranjivati&lt;/i&gt; HTTP poruku. Zahtjev i odgovor se salju iznova svaki put.&lt;br /&gt;
&lt;code&gt;max-age&lt;/code&gt;: &lt;i&gt;kontrolise istek kesa&lt;/i&gt; sto izgleda ovako &lt;code&gt;max-age=&amp;lt;sekunde&amp;gt;&lt;/code&gt; i definise kolicinu vremena kojom se sadrzaj smatra novim (fresh), odnosno koliko dugo web pregledac moze koristiti ovaj kesirani sadrzaj.&lt;/p&gt;
&lt;p&gt;Sadrzaj koji je obicno statican je preporucljivo kesirati na proxy serveru, kao slika logotipa pocetne stranice. Kesirati privatno je preporucljivo ukoliko postoji prilagodjeni prikaz. Na primjer, ukoliko web stranica sadrzi ime korisnika.&lt;/p&gt;
&lt;p&gt;U sledecem primjeru vidimo HTTP odgovor gdje &lt;code&gt;Cache-Control&lt;/code&gt; dozvoljava javni i privatni kes, a moze se zadrzati 157,784,760 sekundi ili pet godina. &lt;code&gt;Expires&lt;/code&gt; se koristi za starije verzije.&lt;/p&gt;
&lt;pre class=&quot;language-http&quot;&gt;&lt;code class=&quot;language-http&quot;&gt;&lt;span class=&quot;token response-status&quot;&gt;&lt;span class=&quot;token http-version property&quot;&gt;HTTP/1.1&lt;/span&gt; &lt;span class=&quot;token status-code number&quot;&gt;200&lt;/span&gt; &lt;span class=&quot;token reason-phrase string&quot;&gt;OK&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token header&quot;&gt;&lt;span class=&quot;token header-name keyword&quot;&gt;Last-Modified&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token header-value&quot;&gt;Tue, 10 Oct 2019 22:38:58 GMT&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token header&quot;&gt;&lt;span class=&quot;token header-name keyword&quot;&gt;Expires&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token header-value&quot;&gt;Sat, 10 Oct 2024 22:38:58 GMT&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token header&quot;&gt;&lt;span class=&quot;token header-name keyword&quot;&gt;Cache-Control&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token header-value&quot;&gt;max-age=157784760,public&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ukoliko klijent posalje HTTP zahtjev koji ukljucuje i uslovno zaglavlje kao &lt;code&gt;If-Modified-Since: Wed, 25 Jan 2020 14:27:01 GMT&lt;/code&gt;. Server odgovara sa &lt;code&gt;304 Not Modified&lt;/code&gt; ako sadrzaj nije modifikovan od dana preuzimanja i klijent moze slobodno koristiti vec pohranjen sadrzaj.&lt;/p&gt;
&lt;p&gt;Jos jedan primjer validiranja je &lt;code&gt;ETag&lt;/code&gt;. On nema drugog znacenja i generisan je tako sto je sadrzaj provucen kroz algoritam za hesiranje. Promjena i jednog slova u sadrzaju rezultira generisanjem drugacijeg ETaga. Poredjenjem dva ETaga se moze utvrditi da li se desila promjena. Ukoliko su &lt;code&gt;ETag&lt;/code&gt; vrijednosti iste — kes fajlovi koje ima klijent su validni. Klijent preuzima sadrzaj ponovo ukoliko su vrijednosti razlicite.&lt;/p&gt;
&lt;pre class=&quot;language-http&quot;&gt;&lt;code class=&quot;language-http&quot;&gt;&lt;span class=&quot;token header&quot;&gt;&lt;span class=&quot;token header-name keyword&quot;&gt;ETag&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token header-value&quot;&gt;&quot;33a64df551425fcc55e4d42a148795d9f25f89d4&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Kada server odgovori sa zaglavljem  &lt;code&gt;Clear-Site-Data&lt;/code&gt; brisu se podaci pretrazivanja (npr. kolacici, skladiste, kes memorija).&lt;/p&gt;
&lt;h2 id=&quot;kolacici&quot;&gt;Kolacici&lt;/h2&gt;
&lt;p&gt;Pomenuto je da je HTTP protokol &lt;i&gt;bez stanja&lt;/i&gt; i da to znaci da je svaka transakcija zahtjev-odgovor nezavisna od bilo koje prosle ili buduce transakcije. Sa druge strane, mnoge web aplikacije i usluge imaju razna stanja. Jedan od uobicajnih je kada Facebook zna da smo prijavljeni na nalog iako iznova saljemo nove zahtjeve, a prosli su davno zaboravljeni.&lt;/p&gt;
&lt;p&gt;Web stranice koje imaju potrebu pratiti korisnike ce se obicno okrenuti kolacicima. Kolacic je mali &lt;i&gt;tekstualni fajl koji web pregledac dobije od web stranice&lt;/i&gt; pri posjeti. Kolacic sluzi da podsjeti sajt o korisnikovim prethodnim posjetama i prilagodi prikaz u skladu sa njim. Kolacic u sebi moze imati informacije poput korisnickog imena i lozinke ili identifikacionog broja za identifikaciju sesije.&lt;/p&gt;
&lt;p&gt;Kada klijent posalje zahtjev da vidi sadrzaj web stranice, server u odgovoru moze ukljuciti kolacic kroz HTTP zaglavlje. Onda web pregledac u svakom sledecem zahtjevu salje i sadrzaj kolacica u HTTP zaglavlju.&lt;/p&gt;
&lt;h3 id=&quot;kako-se-postavlja-kolacic%3F&quot;&gt;Kako se postavlja kolacic?&lt;/h3&gt;
&lt;p&gt;Za postavljanje kolacica kroz HTTP odgovor se koristi &lt;code&gt;Set-Cookie&lt;/code&gt; HTTP zaglavlje. Za slanje vise kolacica je potrebno postaviti vise &lt;code&gt;Set-Cookie: &amp;lt;ime-kolacica&amp;gt;=&amp;lt;vrijednost-kolacica&amp;gt;&lt;/code&gt; zaglavlja u istom odgovoru.&lt;/p&gt;
&lt;pre class=&quot;language-http&quot;&gt;&lt;code class=&quot;language-http&quot;&gt;&lt;span class=&quot;token response-status&quot;&gt;&lt;span class=&quot;token http-version property&quot;&gt;HTTP/2.0&lt;/span&gt; &lt;span class=&quot;token status-code number&quot;&gt;200&lt;/span&gt; &lt;span class=&quot;token reason-phrase string&quot;&gt;OK&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token header&quot;&gt;&lt;span class=&quot;token header-name keyword&quot;&gt;Content-Type&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token header-value&quot;&gt;text/html&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token header&quot;&gt;&lt;span class=&quot;token header-name keyword&quot;&gt;Set-Cookie&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token header-value&quot;&gt;yummy_cookie=choco&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token header&quot;&gt;&lt;span class=&quot;token header-name keyword&quot;&gt;Set-Cookie&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token header-value&quot;&gt;tasty_cookie=strawberry&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Svakim narednim zahtjevom web pregledac salje prethodno dobijene kolacice kroz HTTP zaglavlje &lt;code&gt;Cookie&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-http&quot;&gt;&lt;code class=&quot;language-http&quot;&gt;&lt;span class=&quot;token request-line&quot;&gt;&lt;span class=&quot;token method property&quot;&gt;GET&lt;/span&gt; &lt;span class=&quot;token request-target url&quot;&gt;/sample_page.html&lt;/span&gt; &lt;span class=&quot;token http-version property&quot;&gt;HTTP/2.0&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token header&quot;&gt;&lt;span class=&quot;token header-name keyword&quot;&gt;Host&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token header-value&quot;&gt;www.example.org&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token header&quot;&gt;&lt;span class=&quot;token header-name keyword&quot;&gt;Cookie&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token header-value&quot;&gt;yummy_cookie=choco; tasty_cookie=strawberry&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ovaj tekstualni fajl ne moze imati vise od 4 KB.&lt;/p&gt;
&lt;h2 id=&quot;tcp-veza-i-http&quot;&gt;TCP veza i HTTP&lt;/h2&gt;
&lt;p&gt;Vidjeli smo kako HTTP omogucava web pregledacu da zahtjeva sadrzaj od servera, ali HTTP specifikacija ne govori o tome kako zahtjev ili odgovor putuju preko mreze do servera ili klijenta. Iz ovog razloga je potrebno zaviriti u slojeve ispod HTTP protokola. Mrezna komunikacija se sastoji od &lt;i&gt;vise slojeva&lt;/i&gt; i svaki od njih ima odredjene odgovornosti.&lt;/p&gt;
&lt;p&gt;HTTP se jos zove i &lt;i&gt;aplikacijski sloj&lt;/i&gt; jer predstavlja jezik kojim dvije aplikacije komuniciraju preko mreze (npr. klijent i server).&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/slojevi.png&quot; alt=&quot;HTTP zahtjev putuje kroz mrezne slojeve.&quot; /&gt; 
 &lt;figcaption&gt;Putovanje HTTP zahtjeva kroz slojeve.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;HTTP poruka od web pregledaca mora putovati kroz seriju slojeva da bi stigla na destinaciju. Ispod aplikacijskog sloja se nalazi &lt;em&gt;protokol transportnog sloja&lt;/em&gt;. HTTP obicno putuje kroz TCP (Transmission Control Protocol) i pri biranju URL adrese web pregledac uspostavlja TCP vezu sa serverom, tipicno na portu 80. TCP veza se brine o tome da se poruka dostavi serveru bez gubitka ili dupliranja. Ukoliko se neki paket izgubi TCP ce ga poslati ponovo. Takodje, TCP prilagodjava brzinu slanja brzini kojoj prijemnik obradjuje podatke.&lt;/p&gt;
&lt;p&gt;Nakon transportnog sloja je IP (Internet protocol) ili &lt;em&gt;mrezni / internet sloj&lt;/em&gt;. TCP i IP nisu isto, ali su besmisleni jedno bez drugog i cesto se pominju zajedno. Oni stavljaju veliki znacaj na tacnost. IP zahtjeva od servera da imaju IP adresu kako bi mogao kontrolisati kretanje paketa kroz rutere i druge mrezne uredjaje do njihove destinacije sirom svijeta.&lt;br /&gt;
IP je takodje odgovoran i za &lt;i&gt;razbijanje podataka u pakete&lt;/i&gt;. Kada bi se cijela poruka slala odjednom u slucaju greske se ponovo mora poslati komplentna poruka. Zbog prakticnosti se svaka poruka dijeli u manje pakete koji se na destinaciji ponovo sastavljaju u cjelinu. Ovim svaki paket moze izabrati drugu rutu ukoliko je prva zagusena ili nedostupna.&lt;/p&gt;
&lt;p&gt;Svi navedeni protokoli i slojevi se desavaju unutar racunara. Medjutim, da bi ovi paketi putovali mrezom potreban je hardver poput optickih kablova, bezicne mreze, satelitske veze itd. Za ovaj dio je odgovoran &lt;em&gt;sloj veze&lt;/em&gt; (Data Link Layer). Ethernet odredjuje kako podaci trebaju izgledati u obliku elektricnih signalala (jedinica i nula).&lt;/p&gt;
&lt;p&gt;Zatim se prolazi kroz ove iste slojeve obrnutim redoslijedom da bi se paketi ponovo sastavili u format koji odgovara klijentu. Ethernet prenosi podatke IP sloju. IP ih prenosi TCP transportnom sloju nakon kojeg dobijamo HTTP poruku koju je poslao klijent. HTTP poruka se onda obradjuje na serveru.&lt;/p&gt;
&lt;p&gt;Medjutim, da li su ovi paketi sigurni i privatni?&lt;/p&gt;
&lt;h2 id=&quot;https&quot;&gt;HTTPS&lt;/h2&gt;
&lt;p&gt;Da bi klijent i server mogli komunicirati, izmedju njih mora biti uspostavljena veza. Kao sto je vec pomenuto, HTTP poruke se salju kroz transportni TCP protokol i web saobracaj obicno koristi 80 port. TCP garantuje da ce podaci biti dostavljeni ukoliko je &amp;quot;sagovornik&amp;quot; dostupan, ali ne garantuje bilo kakav nivo sigurnosti.&lt;/p&gt;
&lt;p&gt;Iz ovog razloga se dodaje jedan sigurnosni sloj izmedju HTTP-a i TCP-a. Taj sloj je &lt;i&gt;SSL&lt;/i&gt; (Secure Socket Layers) ili njegova novija i sigurnija verzija &lt;i&gt;TLS&lt;/i&gt; (Transport Layer Security). TLS i SSL su kriptografski protokoli dizajnirani da obezbjede sigurnost komunikacije na mrezi. Na ovaj nacin dobijamo HTTPS (&lt;i&gt;Hypertext Transfer Protocol Secure&lt;/i&gt;) i &lt;i&gt;tuneliranje&lt;/i&gt;. HTTP poruka prolazi kroz SSL tunel. SSL prima HTTP poruke, sifrira ih, salje preko TCP veze i ponovo ih desifruje na destinaciji. Enkripcija stiti od prisluskivanja i izmjene HTTP poruka.&lt;/p&gt;
&lt;figure style=&quot;max-width: 400px&quot;&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/https.jpg&quot; alt=&quot;The beginning of a secure https URL shown in an web browser&#39;s address bar&quot; /&gt; 
 &lt;figcaption&gt;Pocetak sigurne HTTPS URL adrese.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;SSL je termin koji preovladava na internetu i koji se cesto koristi iako se misli na TLS. SSL nije siguran i odavno je zastario. Vremenska linija razvoja SSL i TLS protokola:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;SSL v1.0&lt;/b&gt; je 90ih razvio Netscape i nikada nije bio objavljen zbog sigurnosnih problema&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;SSL v2.0&lt;/b&gt; je pusten 1995. godine, ali i dalje ima mane&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;SSL v3.0&lt;/b&gt; je objavljen 1996. godine i znacajno mijenja nivo sigurnosti. Medjutim, SSL 3.0 i prethodne verzije su zastarjele od 2015. godine.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;TLS v1.0&lt;/b&gt; je razvio IETF 1999. godine kao bolju verziju SSL-a&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;TLS v1.1&lt;/b&gt; je izasao 2006. godine i 2008 je zamijenjen sa &lt;b&gt;TLS v1.2&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;TLS v1.3&lt;/b&gt; je objavljen 2018. godine. TLS v1.0 i TLS v1.1 se od 3.2020. godine smatraju zastarjelim verzijama. Dostupne su samo TLS v1.2 i TLS v1.3.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Da bi sajt imao HTTPS neophodno je da ima funkcionalan &lt;em&gt;digitalni SSL certifikat&lt;/em&gt; na serveru. On potvrdjuje identitet servera (poput licne karte koja dokazuje identitet osobe) i omogucava kriptovanu vezu. Obicno sadrzi informacije poput&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Naziv domene za koji je izdan certifikat&lt;/li&gt;
&lt;li&gt;Osoba, organizacija ili uredjaj kom je certifikat izdan&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Izdavac certifikata (&lt;i&gt;Certificate Authority&lt;/i&gt; ili CA)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Digitalni potpis CA&lt;/li&gt;
&lt;li&gt;Datum izdavanja i isteka certifikata&lt;/li&gt;
&lt;li&gt;Algoritam koji se koristi za certifikat&lt;/li&gt;
&lt;li&gt;Javni kljuc (privatni kljuc se ne otkriva)&lt;/li&gt;
&lt;li&gt;itd.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kada klijent isprva uputi HTTP zahtjev, on pokusava naci certifikat na serveru, a potom provjerava izdavaca certifikata u listi poznatih autorizovanih izdavaca. Ukoliko ga ne moze naci u CA listi ili certifikat ne postoji, web pregledac upozorava korisnika o tome. Nakon sto je certifikat potvrdjen izvrsava se SSL inicijalizacija i rukovanje (&lt;i&gt;SSL handshake&lt;/i&gt;), te je moguce ostvariti sigurno slanje podataka.&lt;/p&gt;
&lt;h2 id=&quot;alati-za-pracenje-http-saobracaja&quot;&gt;Alati za pracenje HTTP saobracaja&lt;/h2&gt;
&lt;p&gt;Web developeri najcesce koriste &lt;a target=&quot;_blank&quot; href=&quot;https://developer.chrome.com/docs/devtools/&quot;&gt;Chrome DevTools&lt;/a&gt; koji se moze aktivirati na web stranici sa F12 ili desni klik &amp;gt; Inspect. Potrebno je izabrati karticu Network i ponovo ucitati stranicu. Klikom na neku od prikazanih stranica mogu se vidjeti detalji o tom specificnom HTTP zahtjevu i odgovoru.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/HTTP-zahtjevi.JPG&quot; alt=&quot;Chrome DevTools and HTTP saobracaj.&quot; /&gt; 
 &lt;figcaption&gt;Chrome DevTools i pracenje HTTP saobracaja.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Takodje se pominju &lt;a target=&quot;_blank&quot; href=&quot;https://www.wireshark.org/&quot;&gt;Wireshark&lt;/a&gt; i &lt;a target=&quot;_blank&quot; href=&quot;https://www.telerik.com/download/fiddler&quot;&gt;Fiddler&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;http-statusni-kodovi&quot;&gt;HTTP statusni kodovi&lt;/h3&gt;
&lt;p&gt;Svaki odgovor od servera ima statusni kod. Ovaj kod govori klijentu kako da tumaci odgovor servera. Navedeni su neki znacajni kodovi.&lt;/p&gt;
&lt;h3 id=&quot;1xx%3A-informativne-poruke&quot;&gt;1xx: Informativne poruke&lt;/h3&gt;
&lt;h3 id=&quot;2xx%3A-uspjeh&quot;&gt;2xx: Uspjeh&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Najcesci kod je &lt;code&gt;200 OK&lt;/code&gt;. Zahtjev je uspjesno obradjen i server kao odgovor salje trazeni sadrzaj.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;201 Created&lt;/code&gt;. Zahtjev je zavrsen i kreiran je novi sadrzaj.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;202 Accepted&lt;/code&gt;. Zahtjev je prihvacen za obradu, ali obrada nije zavrsena.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;204 No Content&lt;/code&gt;. U odgovoru nema tijela poruke.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;206 Partial Content&lt;/code&gt;. Oznacava da odgovor sadrzi samo djelimican sadrzaj.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;3xx%3A-preusmjeravanje&quot;&gt;3xx: Preusmjeravanje&lt;/h3&gt;
&lt;p&gt;Ovaj kod zahtijeva od klijenta da preduzme dodatne korake. Najcesci slucaj upotrebe je promjena URL kako bi klijent dosao do sadrzaja.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;301 Moved Permanently&lt;/code&gt;. Sadrzaj se sada nalazi na novoj URL adresi.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;303 See Other&lt;/code&gt;. Trazena stranica se moze pronaci na drugoj URL adresi.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;304 Not Modified&lt;/code&gt;. Server je utvrdio da se sadrzaj nije promjenio i da klijent moze koristiti njegovu kesiranu kopiju. Ovo radi uz pomoc HTTP zaglavlja kao &lt;code&gt;If-Modified-Since&lt;/code&gt; i &lt;code&gt;If-None-Match&lt;/code&gt;, gdje se utvrdjuje da li je sadrzaj mijenjan nakon datuma kesiranja sadrzaja.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;307 Temporary Redirect&lt;/code&gt;. Sadrzaj se privremeno nalazi na novom URL.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;4xx%3A-greska-klijenta&quot;&gt;4xx: Greska klijenta&lt;/h3&gt;
&lt;p&gt;Ovi kodovi se koriste kada server misli da je klijent kriv, da li zbog zahtijevanja nepostojeceg sadrzaja ili kreiranja loseg zahtjeva. Najpoznatiji statusni kod u ovoj klasi je &lt;code&gt;404 Not Found&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;400 Bad Request&lt;/code&gt;. Zahtjev pogresno formiran i server nije shvatio zahtjev.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;401 Unauthorized&lt;/code&gt;. Za izvrsavanje zahtjeva klijent mora uraditi autentifikaciju (npr. podnosenjem korisnickog imena i sifre).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;402 Payment Required&lt;/code&gt;. Ovaj statusni kod jos uvijek nije dostupan. Namjenjen je za sisteme digitalnog placanja.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;403 Forbidden&lt;/code&gt;. Server je odbio pristup sadrzaju.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;404 Not Found&lt;/code&gt;. Oznacava da server ne moze pronaci zahtjevani sadrzaj.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;405 Method Not Allowed&lt;/code&gt;. Koristi se nevazeci HTTP metod u startnoj liniji ili server ne podrzava metod.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;408 Request Timeout&lt;/code&gt;. Zahtjev je trajao duze nego je server bio spreman da ceka.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;409 Conflict&lt;/code&gt;. Zahtjev nije mogao biti dovrsen zbog konflikta.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;410 Gone&lt;/code&gt;. Zahtjevana stranica vise nije dostupna.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;415 Unsupported Media Type&lt;/code&gt;. Server ne prihvata zahtjev jer tip medija nije podrzan.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;5xx%3A-greska-servera&quot;&gt;5xx: Greska servera&lt;/h3&gt;
&lt;p&gt;Ova klasa kodova se koristi za oznacavanje greske servera tokom obrade zahtijeva.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;500 Internal Server Error&lt;/code&gt;. Server ima internu gresku koja ga je sprijecila da ispuni zahtjev.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;501 Not Implemented&lt;/code&gt;. Zahtjev nije zavrsen. Server ne podrzava trazenu funkcionalnost.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;503 Service Unavailable&lt;/code&gt;. Server je privremeno preopterecen ili ne radi. Obicno server nece ni odgovoriti i zahtjev ce isteci.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;dodatni-izvori&quot;&gt;Dodatni izvori&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Uz ovaj video mozete prakticno istraziti zahtjeve, odgovore, zaglavlja i njihove kodove: &lt;a target=&quot;_blank&quot; href=&quot;https://www.youtube.com/watch?v=VywxIQ2ZXw4&quot;&gt;Postman Beginner&#39;s Cousrse - API Testing&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTTP&quot;&gt;HTTP — MDN Web Docs&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://code.tutsplus.com/series/http-succinctly--net-33683&quot;&gt;HTTP sazeto&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- Sire objasnjenje o tome &lt;a href=&quot;https://www.youtube.com/watch?v=zN8YNNHcaZc&quot;&gt;How does the internet work? (Full Course)&lt;/a&gt; je kurs koji mogu pratiti i oni koji nemaju prethodno znanje o temi. --&gt;
</content>
  </entry>
  
  <entry>
    <title>Kako radi web?</title>
    <link href="https://webdevlpr.com/posts/kako-radi-web/"/>
    <id>https://webdevlpr.com/posts/kako-radi-web/</id>
    <updated>2022-02-07T19:33:53Z</updated>
    <summary>Detalji o tome kako web funkcionise nije nesto o cemu obicno razmisljamo. Medjutim, svaki web developer treba znati dio osnovne teorije. Osnove su kljucne za pisanje boljih web aplikacija.</summary>
    <content type="html">&lt;p&gt;Cilj teksta je bolje razumijevanje necega sto koristimo svakodnevno. Ucenje osnova weba isprva nije neophodno za pisanje koda, ali na duze staze je kljucno za &lt;i&gt;pisanje boljih web aplikacija&lt;/i&gt; i rjesavanje problema pri suocavanju sa greskama. Pogled iz perspektive web developera.&lt;/p&gt;
&lt;h2 id=&quot;klijent-i-server&quot;&gt;Klijent i server&lt;/h2&gt;
&lt;p&gt;Sajt je samo &lt;i&gt;nekolicina fajlova&lt;/i&gt; (koji mogu biti kod, slike, pdf dokumenati itd.) koja se nalazi na nekom racunaru. Drugo ime za taj racunar je &lt;em&gt;server&lt;/em&gt; i povezan je na internet. Njegova svrha je da &lt;i&gt;usluzuje&lt;/i&gt; klijente i odgovara na zahtjeve.&lt;br /&gt;
Kada korisnik klikne na neki link, on je zapravo poslao zahtijev odgovarajucem serveru da dobije pristup fajlovima kako bi pogledao sadrzaj kroz web pregledac (poput Chrome, Firefox, Opera ili Safarija). Web pregledac je ovdje &lt;em&gt;klijent&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Trazeni server odgovara na zahtjev sa svim potrebnim fajlovima, te web pregledac (klijent) interpretira kod iz fajlova i voilà: na ekranu vidite ovu stranicu. &lt;em&gt;Internet se temelji na komunikaciji izmedju klijenta i servera.&lt;/em&gt;&lt;/p&gt;
&lt;figure style=&quot;max-width: 500px;&quot;&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/client-server.png&quot; alt=&quot;Klijent i server komuniciraju tako sto klijent salje zahtjev/upit serveru, a server usluzuje klijenta tako sto mu daje povratnu informaciju na taj specificni zahtjev.&quot; /&gt; 
 &lt;figcaption&gt;Odvijanje komunikacija izmedju klijenta i servera.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Ipak pojednostavljeni opis komunikacije klijenta i servera ne govori cijelu pricu. Ukljuceno je mnogo drugih dijelova.&lt;/p&gt;
&lt;h2 id=&quot;ip-adrese-i-domene&quot;&gt;IP adrese i domene&lt;/h2&gt;
&lt;p&gt;Svakom povezanom uredjaju na internetu je dodjeljena jedinstvena IP adresa (Internet Protocol address). Svrha IP adrese je dodijeliti identifikator svakom uredjaju na internetu kako bi se mogao pronaci i komunicirati sa njim. Pomocu nje pristupamo racunaru (serveru) sa zeljenim sadrzajem.&lt;/p&gt;
&lt;p&gt;Tipicna IP adresa bi izgledala ovako: &lt;code&gt;32.248.146.43&lt;/code&gt;. Najosnovniji format ukljucuje jednostavan skup od 4 bloka brojeva sa minimalnom &lt;code&gt;0.0.0.0&lt;/code&gt; i maksimalnom &lt;code&gt;255.255.255.255&lt;/code&gt; vrijednosti. Recimo &lt;code&gt;74.125.128.147/search?q=youtube&lt;/code&gt; vodi na Google stranicu sa rezultatima za kljucnu rijec &amp;quot;youtube&amp;quot; (bar dok &lt;code&gt;google.com&lt;/code&gt; ne promjeni IP adresu).&lt;/p&gt;
&lt;p&gt;Medjutim, ovakvi brojevi nisu prakticni za pamcenje. Ukoliko bi sajt promijenio server dodijelila bi mu se nova IP adresa a korisnik se razocarao sa &lt;code&gt;This page can’t be found&lt;/code&gt; greskom jednom kada ukuca staru IP adresu i linkovi bi ucestalije prestajali raditi. Iz ovih razloga postoje domene kakve znamo poput &lt;code&gt;nekisajt.ba&lt;/code&gt; gdje je &lt;i&gt;.ba&lt;/i&gt; &lt;i&gt;najvisi nivo internet domene&lt;/i&gt; ili Top Level Domain (TLD).&lt;/p&gt;
&lt;p&gt;Ovdje je &lt;a target=&quot;_blank&quot; href=&quot;https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains&quot;&gt;spisak&lt;/a&gt; internet domena najviseg nivoa. Njih uredjuje i dodaje medjunarodna organizacija &lt;a target=&quot;_blank&quot; href=&quot;https://www.iana.org/&quot;&gt;IANA&lt;/a&gt;. IANA potom odredjuje koja organizacija ce dalje biti glavni &lt;a target=&quot;_blank&quot; href=&quot;https://www.iana.org/domains/root/db&quot;&gt;administrator&lt;/a&gt; koje domene. Za &lt;code&gt;.ba&lt;/code&gt; je to &lt;a target=&quot;_blank&quot; href=&quot;https://nic.ba/&quot;&gt;UTIC&lt;/a&gt;, za &lt;code&gt;.hr&lt;/code&gt; je &lt;a target=&quot;_blank&quot; href=&quot;http://www.dns.hr/&quot;&gt;CARNet&lt;/a&gt;, za &lt;code&gt;.rs&lt;/code&gt; je &lt;a target=&quot;_blank&quot; href=&quot;https://www.rnids.rs/&quot;&gt;RNIDS&lt;/a&gt; itd.&lt;/p&gt;
&lt;p&gt;Da bi firma mogla nuditi uslugu registracije domene — prvo se mora poslati zahtjev organizaciji koja je glavni administrator domene. Ako administrator odobri zahtjev firma ce biti dodana na spisak ovlastenih registara (sto izgleda &lt;a target=&quot;_blank&quot; href=&quot;https://www.rnids.rs/lat/registri/spisak-ovlascenih-registara-rnids-a&quot;&gt;ovako&lt;/a&gt;). Administratori i firme su zaduzene za &lt;i&gt;registraciju drugog nivoa domene&lt;/i&gt; koja se nalazi prije TLD domene. Drugi nivo domene u &lt;code&gt;nekisajt.ba&lt;/code&gt; je &lt;i&gt;nekisajt&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;Osoba koja je registrovala domenu u jednoj od ovlastenih firmi upravlja sledecim nivoima registrovane domene: &lt;code&gt;blog.nekisajt.ba&lt;/code&gt; gdje je poddomena &lt;i&gt;blog&lt;/i&gt;. Ta ista osoba treba povezati domenu i server na kojoj je pohranila fajlove sajta kako bi domena vodila na odgovarajuci server.&lt;/p&gt;
&lt;p&gt;Kada posaljemo &lt;code&gt;nekisajt.ba&lt;/code&gt; URL zahtjev, presrece ga internet provajder (kao M:tel, Blic, Telekom, SBB) i prosljedjuje ka svom &lt;i&gt;Domain Name Serveru (DNS)&lt;/i&gt; koji domenu pretvara u IP adresu odgovarajuceg servera. DNS je poput adresara sa domenama i IP adresama. Ako DNS nema IP adresu servera na koji vodi trazena domena, zahtjev se onda salje ka administratoru najviseg nivoa domene (u ovom slucaju je to UTIC). Kada administrator posalje IP adresu, ona se cuva na DNS-u internet provajdera da bi se ovaj proces sledeci put izvrsio brze.&lt;/p&gt;
&lt;p&gt;Jednom kada je IP adresa poznata web pregledacu, on serveru salje HTTP poruku u kojoj zahtjeva neku web stranicu ili obradu dinamicnog sadrzaja. Ova poruka i svi ostali podaci izmedju klijenta i servera se salju preko internet mreze koristeci TCP/IP (prevozno sredstvo). Ukoliko je server odobrio zahtjev, klijent dobija &amp;quot;&lt;code&gt;200 OK&lt;/code&gt;&amp;quot; poruku (sto znaci da ima pristup) i trazeni sadrzaj.&lt;/p&gt;
&lt;p&gt;Sve se ovo desava brzo ukoliko server ne mora da izvrsi neku kompleksniju obradu prije slanja podataka klijentu.&lt;/p&gt;
&lt;h2 id=&quot;url-adresa&quot;&gt;URL adresa&lt;/h2&gt;
&lt;p&gt;URL ili Uniform Resource Locator je jedinstveni identifikator koji se koristi za lociranje datoteka i fajlova (resursa) na internetu. Ime domene je zapravo samo jedan od dijelova URL adrese.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/elementi-domene.png&quot; alt=&quot;The elements of an URL&quot; /&gt; 
 &lt;figcaption&gt;Elementi URL adrese.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;Protokol&lt;/i&gt;: je uglavnom &lt;i&gt;http&lt;/i&gt; ili &lt;i&gt;https&lt;/i&gt; koji komunikaciju cini sigurnijom.&lt;br /&gt;
Oba protokola su opsirnije objasnjena u toku teksta.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;Poddomena&lt;/i&gt;: je obicno &lt;code&gt;www&lt;/code&gt; ali je ona opciona.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;Domena&lt;/i&gt;: &lt;code&gt;nekisajt.ba&lt;/code&gt; vodi do servera na kom &amp;quot;zivi&amp;quot; sajt&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;Port&lt;/i&gt;: Broj porta koji server koristi za slusanje HTTP zahtjeva je najcesce 80. Ovo je razlog zasto ga web pregledac obicno izostavi iz URL adrese. Potrebno ga je navesti samo ako server slusa na broju koji nije 80: &lt;code&gt;http://nekisajt.ba:1234/&lt;/code&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;Put do fajla:&lt;/i&gt; vodi na neki fajl na tvrdom disku servera. Npr.:&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;/kontakt.html&lt;/code&gt; vodi na kontakt stranicu koja se nalazi u &lt;i&gt;glavnom folderu&lt;/i&gt;,&lt;br /&gt;
&lt;code&gt;/kontakt.html#forma&lt;/code&gt; automatski vodi na sekciju koja je u html kodu oznacena sa jedinstvenim identifikatorom &lt;code&gt;forma&lt;/code&gt;,&lt;br /&gt;
&lt;code&gt;/aseti/knjiga.pdf&lt;/code&gt; vodi na pdf fajl koji je u ovom slucaju &lt;i&gt;pohranjen u folderu &#39;aseti&#39;&lt;/i&gt;, a koji se nalazi u glavnom folderu ili&lt;br /&gt;
&lt;code&gt;/aseti/slike/logo.jpg&lt;/code&gt; voditi na sliku ukoliko na serveru u &lt;code&gt;/aseti/slike/&lt;/code&gt; folderu postoji slika sa nazivom &lt;code&gt;logo.jpg&lt;/code&gt;. Ako ne postoji slika sa identicnim nazivom ili naznacena hijerarhija foldera web pregledac ce prikazati gresku &lt;code&gt;404 Not Found&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Vecina sadrzaja i izvora mora postojati fizicki u fajl sistemu servera. Ovaj put radi poput fajl sistema na kompjuteru.&lt;/p&gt;
&lt;figure style=&quot;max-width: 500px&quot;&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/path.jpg&quot; alt=&quot;File Explorer put koji vodi do nekog fajla na Windows operativnom sistemu.&quot; /&gt; 
 &lt;figcaption&gt;File Explorer put na Windows operativnom sistemu.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Ukoliko navedemo samo domenu &lt;code&gt;nekisajt.ba&lt;/code&gt; ili put ka odredjenom folderu &lt;code&gt;nekisajt.ba/blog/&lt;/code&gt; bez navodjenja &lt;i&gt;specificnog&lt;/i&gt; fajla koji zelimo iz njega, web pretrazivacu ce se usluziti osnovna stranica &lt;code&gt;/index.html&lt;/code&gt; ukoliko postoji u izabranom folderu.&lt;br /&gt;
Drugi moguci nazivi osnovne stranice pored &lt;code&gt;index.html&lt;/code&gt; su &lt;code&gt;index.htm&lt;/code&gt;, &lt;code&gt;default.html&lt;/code&gt;, &lt;code&gt;default.htm&lt;/code&gt;, &lt;code&gt;home.html&lt;/code&gt; i &lt;code&gt;home.htm&lt;/code&gt;.&lt;br /&gt;
Ukoliko ova stranica ne postoji u trazenom folderu, vecina web pretrazivaca ce prikazati strukturu foldera i fajlova, sto nije najoptimalnije iskustvo.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/folder-structure.JPG&quot; alt=&quot;File Explorer put koji vodi do nekog fajla na Windows operativnom sistemu.&quot; /&gt; 
 &lt;figcaption&gt;Pretrazivac prikazuje sajt koji nema osnovnu stranicu.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Medjutim moguce je konfigurisati server da prepozna bilo koji fajl kao osnovnu stranicu iako se najcesce koristi &amp;quot;index&amp;quot;.&lt;/p&gt;
&lt;p&gt;Sadrzaj moze biti i dinamicne prirode. Zamislite URL adresu koja je dobijena klikom na kategoriju &#39;laptopi&#39;: &lt;code&gt;https://prodavnica.ba/laptopi&lt;/code&gt; i koja ne mora voditi na postojeci staticni .html dokument sa &lt;code&gt;prodavnica.ba&lt;/code&gt; servera. Recimo da je u ovom slucaju URL podesen da automatski pokrene web aplikaciju na serveru koja ce uzeti podatke (sve postojece laptope) iz baze podataka i u tom trenutku generisati i servirati .html stranicu prilagodjenu klijentovom zahtjevu. Ovakva web aplikacije se moze kreirati u PHP, Perl, Ruby on Rails ili nekom drugom backend jeziku.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;GET parametri&lt;/i&gt;: primjer &lt;code&gt;https://nekisajt.ba/pretraga?trazi=web+development&amp;amp;poredaj=najnovije&lt;/code&gt;&lt;br /&gt;
Sve nakon &lt;code&gt;?&lt;/code&gt; je poznato kao upit i sadrzi prosljedjene vrijednosti (&lt;i&gt;query string&lt;/i&gt;) u zahtjevu. Ne postoji standard kako query string treba izgledati jer ovisi od toga kako je web aplikacija programirana da interpretira vrijednosti koje dobije.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;hypertext-transfer-protocol-(http)&quot;&gt;Hypertext Transfer Protocol (HTTP)&lt;/h2&gt;
&lt;p&gt;URL adresa usmjerava i identifikuje sa kim klijent zeli komunicirati, ali ne govori serveru sta se zahtjeva od njega. Web pregledac salje &lt;i&gt;zahtjeve&lt;/i&gt; koristeci HTTP poruke. Primarna funkcija HTTP protokola je da nakon uspostavljanja veze sa serverom trazi sve potrebne informacije za prikaz web stranice i preuzme podatke koje je server proslijedio kao odgovor.&lt;/p&gt;
&lt;p&gt;Kroz HTTP poruku klijent naglasava kakvu reprezentaciju sadrzaja zeli i njegovu namjeru. HTTP poruka je jednostavna tekstualna poruka, a koncept zahtjeva i odgovora je lako usvojiti jer se nazivi u potpunosti opisuju.&lt;br /&gt;
&lt;i&gt;Zahtjev&lt;/i&gt; sadrzi HTTP metodu koja serveru govori sta klijent zeli da radi (cita, modifikuje, brise itd.), putanju do sadrzaja i zaglavlja koja daju dodatne podatke o sadrzaju koji se trazi.&lt;br /&gt;
&lt;i&gt;Odgovor&lt;/i&gt; ukljucuje statusni kod o uspjesnosti realizacije zahtjeva, zaglavlja sa dodatnim korisnim informacijama o odgovoru i sadrzaj.&lt;/p&gt;
&lt;p&gt;HTTP ima definisan format kojim oblikuje zahtjev i salje sve neophodne informacije da bi klijent dobio trazeni sadrzaj, te World Wide Web ne bi radio bez njega. Zato ukoliko se domen ukuca u pretrazivac i pritisne enter — &lt;code&gt;http&lt;/code&gt; se automatski pojavavljuje ispred naziva domena.&lt;/p&gt;
&lt;figure style=&quot;max-width: 400px&quot;&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/url-http.png&quot; alt=&quot;URL adresa sa naglasenim HTTP protokolom prije ostatka adrese.&quot; /&gt; 
 &lt;figcaption&gt;HTTP protokol u URL adresi.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;HTTP je i ujedno protokol bez stanja (&lt;i&gt;stateless&lt;/i&gt;), odnosno protokol koji ne odrzava konstantnu vezu izmedju klijenta i servera, vec se svaki upuceni zahtjev posmatra odvojeno. To znaci da server ne moze pratiti stanja i informacije o klijentu izvan tog zahtjeva i da svaki zahtjev mora sadrzati sve informacije potrebne za njegovo izvrsenje. Ove podatke sadrzi &lt;em&gt;zaglavlje&lt;/em&gt; HTTP poruke.&lt;/p&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 2;&quot;&gt;Ukoliko je neophodno kontinuirano cuvati podatke o nekom &lt;i&gt;stanju&lt;/i&gt; (npr. da je korisnik prijavljen), moguce je koristiti lokalno skladiste (Local Storage), kolacice (Cookies), sesije (Sessions) itd.&lt;/p&gt;
&lt;h4 id=&quot;3-faze-standardne-http-sesije&quot;&gt;3 faze standardne HTTP sesije&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Klijent uspostavi TCP vezu sa serverom&lt;/li&gt;
&lt;li&gt;Klijent salje HTTP zahtjev i ceka HTTP odgovor&lt;/li&gt;
&lt;li&gt;Server obradjuje zahtjev i salje svoj odgovor sa statusnim kodom o uspjesnosti obrade&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;i&gt;Internet konekcija&lt;/i&gt; omogucava slanje i primanje podataka na internetu. Ona je poput puta izmedju klijenta i servera ili ulica izmedju nas i marketa.&lt;br /&gt;
&lt;i&gt;TCP/IP&lt;/i&gt; ili Transmission Control Protocol i Internet Protocol jesu transportni protokoli koji definisu kako podaci trebaju putovati internetom. Moze se zamisliti kao &lt;i&gt;prevozno sredstvo&lt;/i&gt; do marketa (recimo ako definisemo da je to hod ili biciklo).&lt;br /&gt;
&lt;i&gt;HTTP&lt;/i&gt; je komunikacijski protokol koji definise jezik izmedju klijenta i servera kako bi se razumijeli i kako bi klijent dobio ono sto trazi od servera. HTTP je poput &lt;i&gt;jezika koji koristimo za komunikaciju&lt;/i&gt; sa prodavcem da bi dobili ono sto zelimo.&lt;/p&gt;
&lt;p&gt;Drugi dio teksta i vise o HTTP verzijama, metodama, porukama, zaglavljima, kesiranju, kolacicima, TCP vezama, HTTPS protokolu, statusnim kodovima, alatima za pracenje HTTP saobracaja u postu o &lt;a target=&quot;_target&quot; href=&quot;https://webdevlpr.com/posts/HTTP/&quot;&gt;osnovama HTTP protokola&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;dodatni-izvori&quot;&gt;Dodatni izvori&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/How_the_Web_works&quot;&gt;How the Web works&lt;/a&gt; (tekst)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://www.youtube.com/watch?v=hJHvdBlSxug&quot;&gt;How The Web Works - The Big Picture&lt;/a&gt; (youtube)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://www.youtube.com/watch?v=e4S8zfLdLgQ&quot;&gt;How the Internet Works for Developers - Pt 1 - Overview &amp;amp; Frontend&lt;/a&gt; (youtube)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>Frontend - vodic za ucenje</title>
    <link href="https://webdevlpr.com/posts/frontend-vodic-za-ucenje/"/>
    <id>https://webdevlpr.com/posts/frontend-vodic-za-ucenje/</id>
    <updated>2022-01-31T19:33:53Z</updated>
    <summary>Definisani koraci i siguran, ali ne i jedini put za ucenje web developmenta. Vodic namjenjen samostalnom ucenju programiranja za pocetnike.</summary>
    <content type="html">&lt;p&gt;Na internetu je moguce pronaci velike kolicine informacija o web tehnologijama. One se konstantno razvijaju i njihov broj se povecava, te je vrlo lako izgubiti se u njima. Ukoliko ne isplanirate put i krenete na vise strana odjednom mogao bi vas gusiti osjecaj nesigurnosti i izgubljenosti.&lt;br /&gt;
Tekst izlaze osnove i cilj nije uciniti nekoga strucnjakom. Cilj je da se osoba osjeca dovoljno prijatno u ovoj oblasti da nastavi graditi svoj put.&lt;/p&gt;
&lt;p&gt;Poznavanje engleskog jezika je jedan od glavnih uslova jer je materijal za ucenje najcesce na engleskom, tolerantnost ka svakodnevnom sjedenju ispred racunara duze vremena, ali i osnovna kompjuterska pismenost.&lt;/p&gt;
&lt;p&gt;Gdje poceti?&lt;/p&gt;
&lt;h2 id=&quot;slijepo-kucanje&quot;&gt;Slijepo kucanje&lt;/h2&gt;
&lt;p&gt;Ono sto moze znacajno popraviti iskustvo pisanja koda je slijepo kucanje. To znaci da nema potrebe sklanjati oci sa ekrana. Ono ubrzava rad i pomaze pri zadrzavanju fokusa na primarnom zadatku.&lt;/p&gt;
&lt;p&gt;Postoje razlicite igre koje pomazu u vjezbanju ove vjestine. Npr. &lt;a target=&quot;_blank&quot; href=&quot;https://www.ratatype.com/learn/&quot;&gt;Ratatype&lt;/a&gt;, &lt;a target=&quot;_blank&quot; href=&quot;https://www.typing.com/student/lessons&quot;&gt;Typing&lt;/a&gt;, &lt;a target=&quot;_blank&quot; href=&quot;https://www.typingclub.com/&quot;&gt;TypingClub&lt;/a&gt;, &lt;a target=&quot;_blank&quot; href=&quot;https://www.speedtypingonline.com/typing-tutor&quot;&gt;Speed Typing Online&lt;/a&gt;, Opcija za takmicenje sa drugima: &lt;a target=&quot;_blank&quot; href=&quot;https://play.typeracer.com/&quot;&gt;Typeracer&lt;/a&gt;. Navedene su samo neke od njih. Mozete pretraziti vise sa kljucnim rijecima &lt;i&gt;&amp;quot;touch typing&amp;quot;&lt;/i&gt; ili &lt;i&gt;&amp;quot;fast typing&amp;quot;&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;U ovakvim igrama se uci i vjezba ispravan polozaj prstiju na tastaturi, kao i koji prst treba aktivirati koji karakter. Dobro je izdvojiti 10 - 15 minuta dnevno za vjezbanje slijepog kucanja. Osnove se brzo kupe, ali za mjesec dana ce ova vjestina biti na ozbiljnom nivou.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/proper-finger-placement-for-keyboarding.png&quot; alt=&quot;Keyboard scheme - which finger should trigger which key.&quot; /&gt; 
 &lt;figcaption&gt;Sema ispravanog kucanja na tastaturi.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;uredjivac-izvornog-koda&quot;&gt;Uredjivac izvornog koda&lt;/h2&gt;
&lt;p&gt;Ono sto takodje moze popraviti iskustvo pisanja koda je uredjivac izvornog koda (source-code editor) ili editor. Izbor glavnog alata za pisanje koda igra znacajnu ulogu u radnom toku i produktivnosti.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Navedeni su neki od poznatijih besplatnih editora&lt;/i&gt; otvorenog koda sa naznacenim izuzetkom. Obicno dolaze sa odredjenim integrisanim funkcijama, ali se mogu instalirati dodatne po potrebi. Postoje razliciti stavovi na temu koji je najbolji, ali probajte zeljene editore kroz rad i zadrzati se na onom koji najvise odgovara.&lt;/p&gt;
&lt;h3 id=&quot;sublime-text&quot;&gt;Sublime Text&lt;/h3&gt;
&lt;p&gt;Sublime Text se cesto koristi zbog njegove &lt;em&gt;brzine&lt;/em&gt; i jednostavnosti. Pri instalaciji ima osnovne integrisane funkcije za programiranje ali postoji veliki broj paketa za prosirivanje ovakvih funkcija koje je napravila zajednica. Potrebno je vrijeme da se zapamte precice i prilagodi sebi, ali jednom kada se ovo savlada moguce je uredjivati i pisati kod na najbrzi moguci nacin.&lt;/p&gt;
&lt;p&gt;Od 2021. godine dostupan je &lt;a target=&quot;_blank&quot; href=&quot;https://www.sublimetext.com/download&quot;&gt;Sublime Text 4&lt;/a&gt; koji moze biti preuzet i koristen besplatno za evaluaciju. Do sada nije postojalo vremensko ogranicenje za ovu evaluaciju, ali se u besplatnoj verziji povremeno pojavi prozorcic koji pita da li zelite kupiti licencu.&lt;/p&gt;
&lt;h3 id=&quot;vscode&quot;&gt;VSCode&lt;/h3&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://code.visualstudio.com/&quot;&gt;Visual Studio Code&lt;/a&gt; je kompleksan program koji vise zauzima sto ga cini sporijim. Medjutim on je &lt;em&gt;jednostavniji za koristenje&lt;/em&gt; i &lt;em&gt;bogat je funkcijama&lt;/em&gt; odmah po instalaciji. Ovakav editor pruza manji otpor da bi se savladao neki editor.&lt;/p&gt;
&lt;h3 id=&quot;webstorm&quot;&gt;WebStorm&lt;/h3&gt;
&lt;p&gt;Jedan od popularnih je i &lt;a target=&quot;_blank&quot; href=&quot;https://www.jetbrains.com/webstorm/&quot;&gt;WebStorm&lt;/a&gt;. On je kao i Visual Studio Code integrisano razvojno okruzenje (IDE), sto znaci da je bogat raznim svojstvima i spreman da barata velikim projektima. Ono sto dolazi uz kompleksnost je i to sto nije brz poput Sublime Texta. Zato programeri nekada koriste IDE poput WebStorm i VSCode na velikim projektima, a Sublime Text kada je potrebno raditi na pojedinacnom fajlu.&lt;/p&gt;
&lt;p&gt;*Ovaj IDE nije besplatan, ali se cesto koristi u firmama. Sigurna sam da postoji i &lt;i&gt;Free Educational License&lt;/i&gt;. wink&lt;/p&gt;
&lt;h3 id=&quot;brackets&quot;&gt;Brackets&lt;/h3&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://brackets.io/&quot;&gt;Brackets&lt;/a&gt; je pogodan za web dizajnere i pocetnike front-end developere jer ima integrisane funkcije (poput Live Preview, Quick Edit, Quick View, Quick Docs, Code Hints za JavaScript, HTML i CSS).&lt;/p&gt;
&lt;p&gt;Mislim da je &lt;i&gt;Live Preview&lt;/i&gt; jedinstvena funkcija na ovom editoru, a koja moze olaksati usvanjanje CSS jezika. Live Preview vizuelno naznacuje elemente na kojima se primjenjuje blok koda na kom radite, a promjene u kodu su vidljive na stranici u pretrazivacu i prije nego se one zapamte.&lt;/p&gt;
&lt;h2 id=&quot;google-i-umjetnost-pretrazivanja&quot;&gt;Google i umjetnost pretrazivanja&lt;/h2&gt;
&lt;p&gt;Pretrazivanje je jedna od najvaznijih vjestina koje programer treba imati. Nemoguce je pamtiti sve o programiranju, a internet je najveća biblioteka koja postoji. Biti u mogucnosti brzo i efikasno pronaci informacije potrebne za rjesenje nekog problema je neprocjenjivo. Iz ovog razloga je pretrazivac takodje jedan od njegovih glavnih alata.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=cEBkvm0-rg0&quot;&gt;How to &amp;quot;Google It&amp;quot; like a Senior Software Engineer&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;a href=&quot;https://javascript.plainenglish.io/the-most-important-skill-every-programmer-should-know-googling-9fffd3ce3ddf&quot;&gt;The Most Important Skill Every Programmer Should Know: Googling&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;a href=&quot;https://computers.tutsplus.com/tutorials/how-to-find-anything-online-with-advanced-search-techniques--cms-21154&quot;&gt;How to Find Anything Online With Advanced Search Techniques&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;a href=&quot;http://www.googleguide.com/print/adv_op_ref.pdf&quot;&gt;Google Cheat Sheet&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Za postavljanje pitanja tu su i razne zajednice u kojima je moguce postaviti pitanje: discord serveri, reddit, stackoverflow, ChatGPT (kome ne treba slijepo vjerovati kako &amp;quot;samouvjereno&amp;quot; moze dati krive ili nepotpune informacije) itd.&lt;/p&gt;
&lt;h2 id=&quot;kako-radi-internet&quot;&gt;Kako radi internet&lt;/h2&gt;
&lt;p&gt;Kratkorocno ova teorija nije krucijalna za pisanje koda, ali na duze staze je korisno razumijevanje onoga sto se desava u pozadini.&lt;/p&gt;
&lt;h3 id=&quot;klijent-i-server&quot;&gt;Klijent i server&lt;/h3&gt;
&lt;p&gt;Sajt je samo &lt;i&gt;nekolicina fajlova&lt;/i&gt; (koji mogu biti kod, slike, pdf dokumenati itd.) koja se nalazi na nekom racunaru. Drugo ime za taj racunar je &lt;em&gt;server&lt;/em&gt; i povezan je na internet. Njegova svrha je da &lt;i&gt;usluzuje&lt;/i&gt; klijente i odgovara na zahtjeve.&lt;br /&gt;
Kada korisnik klikne na neki link, on je zapravo poslao zahtijev odgovarajucem serveru da dobije pristup fajlovima kako bi pogledao sadrzaj kroz web pregledac (poput Chrome, Firefox, Opera ili Safarija). Web pregledac je ovdje &lt;em&gt;klijent&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Trazeni server odgovara na zahtjev sa svim potrebnim fajlovima, te web pregledac (klijent) interpretira kod iz fajlova i voilà: na ekranu vidite ovu stranicu. &lt;em&gt;Internet se temelji na komunikaciji izmedju klijenta i servera.&lt;/em&gt;&lt;/p&gt;
&lt;figure style=&quot;max-width: 500px;&quot;&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/client-server.png&quot; alt=&quot;Semantic and non-semantic HTML&quot; /&gt; 
 &lt;figcaption&gt;Klijent i server komunikacija.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Ipak opis klijenta i servera ne govori cijelu pricu. Ukljuceno je mnogo drugih dijelova. Ovdje pise vise o tome &lt;a target=&quot;_blank&quot; href=&quot;https://webdevlpr.com/posts/kako-radi-web/#ip-adrese-i-domene&quot;&gt;Kako radi web?&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;struktura-sajta&quot;&gt;Struktura sajta&lt;/h2&gt;
&lt;p&gt;Sve navedeno u ovom dijelu teksta je jednostavno savladati kroz ucenje HTML, CSS i JavaScript jezika. Cilj je samo prikazati kako otprilike izgleda struktura nekog jednostavnog sajta i koncept sadrzaja koji ga cini.&lt;/p&gt;
&lt;p&gt;Pomenuli smo da je sajt neki broj fajlova sa kodom, stilovima, medijskim sadrzajem itd. Da bi ti fajlovi djelovali kao cjelina neophodno je sastaviti ih u logicnu i povezanu strukturu kako bi bili svjesni ostalog sadrzaja sa kojim treba komunicirati. Ovaj proces izgradnje web stranica se izvrsava na &lt;i&gt;lokalnom kompjuteru&lt;/i&gt; da bi se uvjerili da web stranica izgleda i radi ispravno prije nego se otpremi na server.&lt;/p&gt;
&lt;p&gt;U ovom &lt;a target=&quot;_blank&quot; href=&quot;https://webdevlpr.com/posts/sta-cini-web-sajt/#index.html-pocetna-web-stranica&quot;&gt;tekstu&lt;/a&gt; su ukratko predjeni pojedinacni segmenti koji najcesce cine sajt:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;index.html&lt;/code&gt; fajl i drugi HTML kod&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Fajlovi sa stilovima i CSS kodom,&lt;/li&gt;
&lt;li&gt;JavaScript,&lt;/li&gt;
&lt;li&gt;slike i drugi medijski sadrzaj.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;planiranje-prije-pisanja-koda&quot;&gt;Planiranje prije pisanja koda&lt;/h2&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 2;&quot;&gt;Moze biti korisno kada vodite svoj projekat ili nemate dizajn, samo ideju.&lt;/p&gt;
&lt;p&gt;Iako su tehnicke vjestine presudne da bi se izgradio sajt, to nije prvi korak. Definisanje onoga sto je potrebno postici sa sajtom i planiranje dizajna se ne bi smjelo previdjeti. Iako naslov zvuci suvisno, mnogi projekti su neuspjesni zbog nedostatka ciljeva i usmjerenja, a ne nedostatka tehnickog znanja. Pitanja koja mogu pomoci pri definisanju cilja:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Sta tacno zelim postici?&lt;br /&gt;
Je najvaznije pitanje jer direktno odredjuje ostale odgovore. Napisati listu i poredati stavke po prioritetima.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Kako sajt moze pomoci da postignem te ciljeve?&lt;/li&gt;
&lt;li&gt;Sta je neophodno uraditi i kojim redoslijedom da bi se ti ciljevi ostvarili?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ova vjezba ce pomoci pri odlucivanju kakav dizajn i koje funkcionalnosti implementirati, a koje izostaviti jer implementacija nije najoptimalnije usmjeravanje energije za postizanje tih ciljeva. Nekada je bolje iskoristiti postojecu tehnologiju ili druge alate.&lt;/p&gt;
&lt;p&gt;Jedna ideja moze kulminirati u beskonacan broj pitanja i dugu listu zadataka, ali nema potrebe odgovoriti na sva pitanja i zavrsiti sve zadatke. Vazno je imati jasnu ideju koja ce onda pojednostaviti odredjivanje prioriteta (20% zadataka daje 80% rezultata: &lt;a target=&quot;_blank&quot; href=&quot;https://en.wikipedia.org/wiki/Pareto_principle&quot;&gt;Paretov princip&lt;/a&gt;) i njihovo izvrsavanje. Jedna od vaznih i siroko primjenjivih vjestina je umjeti podijeliti zadatke na manje izvedive korake.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Inspirisano sa &lt;a target=&quot;_blank&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Learn/Common_questions/Thinking_before_coding&quot;&gt;How do I start to design my website?&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/What_will_your_website_look_like&quot;&gt;Ovdje&lt;/a&gt; mozete pronaci osnove.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;objavljivanje-sajta-na-internet&quot;&gt;Objavljivanje sajta na internet&lt;/h2&gt;
&lt;p&gt;Proces postavljanja sajta na internet najvise ovisi od usluge hosting provajdera, ali su po pravilu obicno potrebne 3 stavke koje su prethodno pomenute:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Sajt izradjen na lokalnom racunaru (&lt;a target=&quot;_blank&quot; href=&quot;https://webdevlpr.com/posts/sta-cini-web-sajt/&quot;&gt;&lt;i&gt;fajlovi&lt;/i&gt;&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Zakupljen prostor (&lt;i&gt;hosting&lt;/i&gt;) je iznajmljen prostor za fajlove na web serveru od hosting kompanije. Na ovaj server se pohranjuju fajlovi, te ih on posluzuje klijentima na HTTP zahtjev (objasnjeni u &lt;a target=&quot;_blank&quot; href=&quot;https://webdevlpr.com/posts/kako-radi-web/&quot;&gt;Kako radi web?&lt;/a&gt; i &lt;a target=&quot;_blank&quot; href=&quot;https://webdevlpr.com/posts/HTTP/&quot;&gt;osnove HTTP protokola&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://webdevlpr.com/posts/kako-radi-web#ip-adrese-i-domene&quot;&gt;&lt;i&gt;Domena&lt;/i&gt;&lt;/a&gt; kao jedinstvena adresa na kojoj korisnici mogu pronaci sajt.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Sajt mora biti smjesten na web serveru kako bi mu bilo moguce pristupiti sa bilo kog mjesta na svijetu. Postoji mnogo dobrih hosting provajdera i ne bi trebao biti problem pronaci jedan. Postoje i besplatne opcije sve dok se od njih ne ocekuje mnogo.&lt;/p&gt;
&lt;p&gt;Neki hosting provajderi nude uslugu kupovine domene preko njih, ali je obicno isplativije kupiti je zasebno. Cesto se preporucuje &lt;a target=&quot;_blank&quot; href=&quot;https://www.namecheap.com/&quot;&gt;Namecheap&lt;/a&gt; kao jedna od povoljnijih opcija. Ukoliko najvisi nivo domene nije vazan, &lt;a target=&quot;_blank&quot; href=&quot;https://www.freenom.com/&quot;&gt;Freenom&lt;/a&gt; nudi besplatnu registraciju nekih (u ovom trenutku .tk, .ml, .ga, .cf, .gp). Bolje je registrovati poznatiju domenu najviseg nivoa (poput .com, .co, .org, .edu, .ba, .rs, .hr itd.) ukoliko se radi o ozbiljnijem sajtu.&lt;/p&gt;
&lt;h3 id=&quot;netlify&quot;&gt;Netlify&lt;/h3&gt;
&lt;p&gt;Ako zelite jednostavnost — &lt;a target=&quot;_blank&quot; href=&quot;https://www.netlify.com/&quot;&gt;Netlify&lt;/a&gt; je jedan od odlicnih hostinga za licne staticne sajtove i pocetnike. Pocetni paket je besplatan i pri pohranjivanju fajlova prvi put na server, Netlify ce automatski podesiti nasumicnu domenu poput &lt;code&gt;awesome-muse-r78.netlify.com&lt;/code&gt;. Moguce je promijeniti poddomenu u bilo koju koja je slobodna ili podesiti da sajt koristi onu koju ste kupili. Sledeci video ukratko vodi kroz smjesno jednostavne korake objavljivanja sajta na internet pomocu Netlify servisa:&lt;/p&gt;
&lt;div class=&quot;iframe-container&quot;&gt;
&lt;iframe class=&quot;responsive-iframe&quot; src=&quot;https://www.youtube-nocookie.com/embed/tIZC8F9BZaA&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 2;&quot;&gt;Moguce je povezati Nelify sa vasim skladistem na GitHubu tako da svaka promjena koda u skladistu automatski predstavlja okidac za Netlify da azurira sajt sa novim kodom. Ukoliko je kod svakako smjesten u ovakvom skladistu, web developer ne mora ulaziti na Netlify stranicu i rucno prebacivati fajlove na server.&lt;/p&gt;
&lt;p&gt;Tema za neki drugi post 📝: Ovaj tip hostinga moze sluziti i sajtove koji su dinamicni, ali kroz JAMstack (JAMstack objedinjuje JavaScript, API-je, Markup) i serverless funkcije.&lt;/p&gt;
&lt;h2 id=&quot;optimalan-pristup-ucenju&quot;&gt;Optimalan pristup ucenju&lt;/h2&gt;
&lt;p&gt;Znam da se tekst oduzio, ali se priblizava konkretnom dijelu gdje ceka najvise posla. Navedene teme mogu sacuvati vrijeme i ne mora sve biti nauceno iz licnih gresaka. Zato sada pricamo o tome kako pojednostaviti proces ucenja, sacuvati vrijeme i o konceptima kojih je dobro biti svjestan:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Web development je ogroman labirint. Postoji mnogo vjestina koje je moguce nauciti, ali je vazno &lt;em&gt;fokusirati se na jednu vjestinu u odredjenom periodu&lt;/em&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Medju prvim koracima je vazno &lt;em&gt;upoznati osnove&lt;/em&gt;. One obicno pocetnika uce sintaksu i pravila tog jezika, ali i kako razmisljati kao programer. Precice su kontraproduktivne za vecinu (kao ucenje bootstrapa prije CSS-a ili Reacta prije JavaScripta). One znace brz pocetak, ali i naknadnu izgubljenost, ogranicene mogucnosti i trosenje vremenja.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Obratite paznju na svoj zivotni stil i kako on utice na nivo energije. &lt;em&gt;Primjeniti zdravije navike i nacin zivota moze ucenje uciniti znacajno optimalnijim&lt;/em&gt; ali i popraviti kvalitet zivota. Obratite paznju na ishranu, fizicku aktivnost, spavanje, redovne pauze i vrijeme za sebe.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Lako je izgubiti se u tutorijalima i prelaziti sa teme na temu. Umjesto prelazenja svakog izvora po malo i prebacivanje na drugi ispocetka, &lt;em&gt;izabrati medij i ispratiti ga do kraja&lt;/em&gt;. Ovako je jednostavnije izbjeci razvodnjenu paznju, duze zadrzati fokus i brze organizovano preci osnove. U redu je potraziti opsirnije objasnjenje negdje drugo (video, blog, dokumentacija, kurs, projekti).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Mnoge informacije necete nauciti napamet jer ih necete koristiti svakodnevno i to je u redu. Za razliku od onoga kako se uci u skoli, u programiranju je ucenje napamet beskorisno trosenje vremena. &lt;em&gt;Vazno je shvatiti koncept naucenog i biti svjestan da je nesto moguce&lt;/em&gt;. Iz ovog razloga je korisno umjeti koristiti pretrazivac. Trik je znati kako pronaci potrebnu informaciju i kako je primjeniti.&lt;/span&gt;&lt;!-- + &lt;span&gt;Jedna od vaznijih karakteristika za brzo usvajanje materije je &lt;i&gt;potpuni fokus&lt;/i&gt;, medjutim izgradnja fokusa je proces i najbolje je poceti pomalo. U pocetku mozete odrediti male intervale fokusiranog rada i praviti &lt;i&gt;redovne pauze&lt;/i&gt; te postepeno povecavati intervale (na najduze 60 - 90 minuta).&lt;/span&gt; --&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Programiranje je tesko i kada se um suoci sa preprekom, suzdrzite se od prebrzo donesenih zakljucaka o vlastitim sposobnostima. Odmorite se i radite nesto potpuno drugo. &lt;i&gt;Biranje aktivnosti koja ne zahtjeva mentalni napor&lt;/i&gt; moze vise koristiti od forsiranja jer u toku difuznog rada mozak pravi veze izmedju detalja. Zato se nerijetko desi klik i pojave ideje u vezi potencijalnog rjesenja u toku pauze. Cak i kada to nije slucaj, um ce biti svjeziji i spremniji da se suoci sa preprekom.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;em&gt;Kultura transparentnosti i poniznosti&lt;/em&gt; kroz iskrenost prema sebi i drugima u vezi svojih vjestina omogucuje otvorenost ka povratnim informacijama ukoliko nesto ili neko ukazuje na gresku. Internalizovanje povratnih informacija je prilika za napredak i ucenje.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Razmaknuto ponavljanje (&lt;a href=&quot;https://www.youtube.com/watch?v=Z-zNHHpXoMM&quot; target=&quot;blank&quot;&gt;spaced repetition&lt;/a&gt;).&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;aktivno-ucenje&quot;&gt;Aktivno ucenje&lt;/h3&gt;
&lt;p&gt;Gledanje videa ne znaci da je nesto savladano. Drugim rijecima, posmatranjem utakmica ili kako se rade trikovi kartama ne znaci da je steceno znanje primjenljivo. Ucenje je djelotvornije sto je primijenjena metoda ucenja aktivnija. Zato je ono sto se najvise racuna — &lt;em&gt;opsjednutost primjenom nad teorijom&lt;/em&gt;. Pokvarite kod, pravite greske, gradite projekte, rjesavajte probleme i u procesu koristite Google i Stack Overflow.&lt;!-- Deliberate Practice--&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dobra je ideja biti dijete igrati se sa kodom i izazvati gresku.&lt;/li&gt;
&lt;li&gt;Samostalno rekreirati projekat bez pomoci videa ili originalnog izvora.&lt;/li&gt;
&lt;li&gt;Kada pokusavate shvatiti i savladati nesto, pokusajte to objasniti/nauciti nekoga drugog (The Feynman Technique).&lt;/li&gt;
&lt;li&gt;Objasnjavanje svake linije koda kroz komentar je djelotvornije od pisanja biljeski na koje se najcesce necete ponovo vracati.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Aktivno podsjecanje (active recall) i bilo koja metoda koja zahtjeva visi kognitivni napor (suprotno biljeskama i ponovnom citanju koje zahtjevaju nizi kognitivni napor). &lt;a href=&quot;https://youtu.be/ukLnPbIffxE?t=42&quot; target=&quot;blank&quot;&gt;Objasnjenje&lt;/a&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ove tehnike prisiljavaju dublje razmisljanje o temi i razumijevanje kako se dijelovi informacija uklapaju. Zabiljezite slabosti koje prepoznate i fokusirajte se na unaprijedjenje tih vjestina.&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Don&amp;#39;t practice until you get it right. Practice until you can&amp;#39;t get it wrong.&lt;a href=&quot;https://twitter.com/hashtag/javascript?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#javascript&lt;/a&gt; &lt;a href=&quot;https://twitter.com/hashtag/100daysofcode?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#100daysofcode&lt;/a&gt;&lt;/p&gt;&amp;mdash; Palash (@palashv2) &lt;a href=&quot;https://twitter.com/palashv2/status/1289797104072679426?ref_src=twsrc%5Etfw&quot;&gt;August 2, 2020&lt;/a&gt;&lt;/blockquote&gt; &lt;script async=&quot;&quot; src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;p&gt;Ako vas zanima vise o tehnikama koje mozete koristiti za aktivnije ucenje, provjerite ovu &lt;a target=&quot;_blank&quot; href=&quot;https://webdevlpr.com/posts/tehnike-za-aktivno-ucenje/&quot;&gt;vezu&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;kako-poceti-sa-web-tehnologijama&quot;&gt;Kako poceti sa web tehnologijama&lt;/h2&gt;
&lt;p&gt;&lt;i&gt;Minimalni zahtjevi za solidnu pocetnu bazu je jasno razumijevanje HTML&lt;/i&gt; (za definisanje strukture sadrzaja), &lt;i&gt;CSS&lt;/i&gt; (za manipulisanje prikaza i stilizovanje sadrzaja) &lt;i&gt;i JavaScript jezika&lt;/i&gt; (za programiranje web stranice i dodavanje dinamickih funckionalnosti).&lt;/p&gt;
&lt;h3 id=&quot;balansiranje-pasivnog-i-aktivnog-ucenja&quot;&gt;Balansiranje pasivnog i aktivnog ucenja&lt;/h3&gt;
&lt;p&gt;Medjutim, postoji nesto cega je dobro biti svjestan prije pocetka ucenja i zove se &lt;i&gt;tutorial hell&lt;/i&gt;. Odnosi se na &lt;em&gt;beskrajnu&lt;/em&gt; fazu u kom novi developeri prelaze tutorijale/kurseve/knjige, replikuju korake i kod radi ✨. Najcesce zbog osjecaja da je neophodno znati sve prije pocetka svog projekta, ali je u redu poceti ga i guglati sve nejasnoce.&lt;/p&gt;
&lt;p&gt;Problem nastaje u tome sto je instruktor prosao kroz otklanjanje gresaka, rjesavanje problema i prikazuje radnu verziju, te izostaje povratna informacija i svjest o znanju koje nedostaje. Lako je provesti mnogo vremena u ovoj fazi jer je jednostavnija, stice se osjecaj napretka iako se znanje povrsno usvaja i informacije brzo zaboravljaju. Nikada necete biti spremni i znati sve sto zaista treba dok ne uradite taj projekat.&lt;/p&gt;
&lt;p&gt;Ograniciti fazu tako sto cete:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span class=&quot;i&quot;&gt;Kroz nju nauciti samo osnove&lt;/span&gt;. U redu je preci neciji kurs ili drugi sadrzaj sa strukturom za pocetnike i tako ih usvojiti. Moguce je i odrediti vremenski period trajanja koji je otprilike potreban za ucenja osnova.&lt;/li&gt;
&lt;/ol&gt;
&lt;span&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;span class=&quot;i&quot;&gt;Nakon toga prestati gledati tutorijale&lt;/span&gt; i uciti samo (po potrebi iz dokumentacija, clanaka, tutorijala, kurseva itd.) ako pokusavate da napravite nesto sa tim znanjem. &lt;/li&gt;&lt;/ol&gt;&lt;/span&gt;

&lt;p&gt;Magija u tome je sto bi pri izgradnji vlastitog projekta trazili rjesenja na internetu, ona nekada ne bi radiila jer je vas kontekst drugaciji i to rjesenje ne razumijete dovoljno da bi ga prilagodili sebi. Zbog ovakve frustrirajuce, &lt;i&gt;nesrecne ali i tragicne&lt;/i&gt; 💩 okolnosti ce biti neophodno citati dosadne dokumentacije ili potraziti neki drugi izvor za vise informacija da bi uspjesno implementirali rjesenje. U procesu se stice praksa i iskustvo koje izgradjuje razumijevanje kako odredjena tehnologija radi i kako je primjeniti u razlicitim uslovima. Na ovaj nacin se informacije bolje usvajaju i duze pamte sto ima znacajnu prednost nad oponasanjem gotovih koraka koje je instruktor pripremio za svoj projekat.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;i&quot;&gt;Poenta&lt;/span&gt;: potrebno je znati zasto se neki izvor koristi, odnosno sta se pokusava izvesti sa tom informacijom i ne uciti cinjenice radi pukog ucenja kako bi one pocetnika odvele na visi nivo. Gdje je to primjenjivo u onom sto radis? Ako nemas odgovor, izmisli projekat za koji ce koristiti i voilà. &lt;strong&gt;Projekti ce zacementirati znanje&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;izvori-za-ucenje&quot;&gt;Izvori za ucenje&lt;/h3&gt;
&lt;p&gt;U ucenju vam mogu pomoci razni oblici sadrzaja. Izmedju ostalog i:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Interaktivni sajtovi za ucenje web programiranja (&lt;a target=&quot;_blank&quot; href=&quot;https://www.freecodecamp.org/&quot;&gt;freeCodeCamp.org&lt;/a&gt; i &lt;a target=&quot;_blank&quot; href=&quot;https://www.w3schools.com/html/default.asp&quot;&gt;w3schools&lt;/a&gt; su besplatni, &lt;a target=&quot;_blank&quot; href=&quot;https://www.codecademy.com/catalog&quot;&gt;codecademy&lt;/a&gt; i &lt;a target=&quot;_blank&quot; href=&quot;https://scrimba.com/allcourses&quot;&gt;scrimba&lt;/a&gt; su freemium) koji sistematicno uvode nove tehnologije.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Kursevi i&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Knjige cesto mogu biti fokusirane na jednu tehnologiju (kao &lt;a target=&quot;_blank&quot; href=&quot;https://eloquentjavascript.net/&quot;&gt;Eloquent JavaScript&lt;/a&gt; ili Head First HTML and CSS).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&#39;Bootcamp&#39; je brz i intenzivan program/kurs. Osmisljen je da pripremi pocetnike za prakticni rad i obuhvata obradjivanje osnova nekoliko tehnologija. Ali se cini da su najcesce usmjereni ka &lt;u&gt;full stack&lt;/u&gt; razvoju). Jedan od popularnih koje cesto preporucuju je &amp;quot;The Complete 2022 Web Development Bootcamp&amp;quot;, objavljen na Udemy platformi, &lt;a target=&quot;_blank&quot; href=&quot;https://www.youtube.com/watch?v=Xm4BObh4MhI&quot;&gt;ovaj&lt;/a&gt; YouTube bootcamp od svega 12 sati od Ania Kubow. Za kraj nesto drugacije i potpuno besplatno sa mnostvo pozitivnih utisaka: &lt;a target=&quot;_blank&quot; href=&quot;https://leonnoel.com/100devs/&quot;&gt;#100Devs&lt;/a&gt;. Leon je naglasio da se radi o resursu koji ne uci primarno vjestinu kodiranja koliko stvara zajednicu i vodi kroz put koji ukljucuje sve sto je potrebno za pronaci posao u industriji.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://goalkicker.com/&quot;&gt;Goalkicker&lt;/a&gt; je izvor koji objavljuje &lt;em&gt;odlicne&lt;/em&gt; besplatne biljeske za web tehnologije.&lt;br /&gt;
&lt;a target=&quot;_blank&quot; href=&quot;https://ebookfoundation.github.io/free-programming-books/&quot;&gt;free-programming-books&lt;/a&gt; je jedan od najpopularnijih GitHub repozitorija. Na njemu cete pronaci knjige i druge oblike izvora o programiranju. Projekat je preuzeo Free Ebook Foundation, a poceo je sa listom besplatnih knjiga o programiranju na Stack Overflow platformi.&lt;br /&gt;
&lt;a target=&quot;_blank&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Learn#where_to_start&quot;&gt;MDN Web Docs&lt;/a&gt; je dokumentacija koja ce vas voditi od pocetka kroz osnove web developmenta. &lt;a href=&quot;https://htmlreference.io/&quot;&gt;htmlreference.io&lt;/a&gt; i &lt;a href=&quot;https://webdevlpr.com/posts/frontend-vodic-za-ucenje/_blank&quot;&gt;cssreference.io&lt;/a&gt; su vizuelni vodici i web stranice sa HTML i CSS referencama. &lt;a href=&quot;https://javascript.info/&quot;&gt;javascript.info&lt;/a&gt; objasnjava modirni JavaScript od osnovnih do naprednih tema sa jednostavnim i detaljnim objasnjenjima.&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://www.frontendmentor.io/resources&quot;&gt;Ovdje&lt;/a&gt; mozete pronaci mnogo vise korisnih izvora, ali je nemoguce sve obuhvatiti. Svrha je prikazati razlicitost medija koji se mogu pronaci na internetu. Ne morate se ograniciti navedenim. Izaberite ono sto vam odgovara i ispratite do kraja.&lt;/p&gt;
&lt;p&gt;Poslije teorije i osnova uprljati ruke sa:&lt;/p&gt;
&lt;h3 id=&quot;projekti-i-izazovi&quot;&gt;Projekti i izazovi&lt;/h3&gt;
&lt;p&gt;Uradite &lt;em&gt;projekat&lt;/em&gt; sa tehnologijama u kojim zelite postati bolji. Nadjite nesto sto je vama zanimljivo ili zabavno i napravite uz pomoc interneta. Osim neprocjenjivog iskustva koje ce rastegnuti vjestine i utemeljiti znanje, ovo je prilika za popuniti portfolio.&lt;/p&gt;
&lt;p&gt;Raditi &lt;em&gt;izazove&lt;/em&gt; kodiranja je korisno za sticanje iskustva, aktivno usvajanje naucenog i prosirivanje postojece baze znanja. Neki od sajtova sa zadacima i izazovima su &lt;a target=&quot;_blank&quot; href=&quot;https://edabit.com/&quot;&gt;Edabit&lt;/a&gt;, &lt;a target=&quot;_blank&quot; href=&quot;https://www.frontendmentor.io/challenges&quot;&gt;Frontend Mentor&lt;/a&gt;, &lt;a target=&quot;_blank&quot; href=&quot;https://www.codementor.io/&quot;&gt;codementor&lt;/a&gt;, &lt;a target=&quot;_blank&quot; href=&quot;https://100dayscss.com/&quot;&gt;100 Days of CSS&lt;/a&gt;, &lt;a target=&quot;_blank&quot; href=&quot;https://javascript30.com/&quot;&gt;30 Day Vanilla JS coding challenge&lt;/a&gt;, &lt;a target=&quot;_blank&quot; href=&quot;https://www.adventofjs.com/&quot;&gt;Advent of JavaScript&lt;/a&gt;, &lt;a target=&quot;_blank&quot; href=&quot;https://adventjs.dev/&quot;&gt;adventJS&lt;/a&gt;, &lt;a target=&quot;_blank&quot; href=&quot;https://tevko.github.io/practice/&quot;&gt;Tevko Practice&lt;/a&gt;, &lt;a target=&quot;_blank&quot; href=&quot;https://www.dailyui.co/&quot;&gt;Daily UI&lt;/a&gt;, &lt;a target=&quot;_blank&quot; href=&quot;https://www.codewell.cc/&quot;&gt;Codewell&lt;/a&gt;, &lt;a target=&quot;_blank&quot; href=&quot;https://devchallenges.io/&quot;&gt;Dev Challenges&lt;/a&gt;,  &lt;a target=&quot;_blank&quot; href=&quot;https://piccalil.li/category/front-end-challenges-club/?ref=blog.moeminmamdouh.com&quot;&gt;Piccalilli&lt;/a&gt;, &lt;a target=&quot;_blank&quot; href=&quot;https://www.hackerrank.com/&quot;&gt;HackerRank&lt;/a&gt;, &lt;a target=&quot;_blank&quot; href=&quot;https://www.codewars.com/&quot;&gt;Codewars&lt;/a&gt; itd. &lt;a target=&quot;_blank&quot; href=&quot;https://dribbble.com/&quot;&gt;Dribble&lt;/a&gt; ima veliku kolekciju dizajniranih web stranica koje mozete klonirati kroz kod. &lt;a target=&quot;_blank&quot; href=&quot;https://onepagelove.com/templates/html-templates&quot;&gt;Onepagelove&lt;/a&gt; je sajt sa razlicitim temama i sablonima web stranica kojih je moguce skinuti ili koristiti za inspiraciju. Potrazite &amp;quot;coding challenges&amp;quot; ili &amp;quot;coding wars&amp;quot;.&lt;/p&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 2;&quot;&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://www.100daysofcode.com/&quot;&gt;#100daysofcode&lt;/a&gt; ce mozda zvucati kao zanimljiv trend.&lt;/p&gt;
&lt;p&gt;Preuzimanje jednostavnih &lt;em&gt;honorarnih projekata&lt;/em&gt; (na platformama poput &lt;a target=&quot;_blank&quot; href=&quot;https://www.upwork.com/&quot;&gt;Upwork&lt;/a&gt;) znaci da cete biti prisiljeni dostaviti proizvod za novac i prisiljeni da ucite.&lt;/p&gt;
&lt;h2 id=&quot;sirenje-vjestina-i-posao&quot;&gt;Sirenje vjestina i posao&lt;/h2&gt;
&lt;p&gt;Sta nakon savladanih osnova kroz praktican rad? Na ovoj tacki mozete preuzeti neki jednostavniji honorarni posao ili aplicirati za poslove na puno radno vrijeme i kada jos uvijek ne ispunjavate sve navedene uslove oglasa. Neka mudrost kaze &amp;quot;&lt;em&gt;ako ispunjavate sve zahtjeve posla, mozda aplicirate za pogresan posao&lt;/em&gt;&amp;quot;. Pozicija bi trebala biti izazov za trenutne vjestine i na duze staze prosiriti sposobnosti aplikanta.&lt;/p&gt;
&lt;p&gt;Pokazite volju da ucite, pozitivan stav, prizemnost i svjesnost svojih ogranicenja. Budite iskreni u vezi onoga sto ne znate, pokazite da umijete shvatiti kako rijesiti problem, ali i da znate kada je problem prekomplikovan za vase mogucnosti. U takvim okolnostima se vise cijeni sposobnost da osoba trazi pomoc umjesto provede previse vremena na problemu.&lt;/p&gt;
&lt;p&gt;Ukoliko ne dobijete posao, dobicete iskustvo intervjuisanja i povratnu informaciju iz kojih mozete zakljuciti na cemu poraditi. U toku potrage za poslom nastaviti unaprijedjivati vjestine kroz licne projekte, dodavati ih u portfolio i siriti bazu vjestina: &lt;em&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://roadmap.sh/frontend&quot;&gt;Mapa puta&lt;/a&gt;&lt;/em&gt; je dijagram za usmjeravanje programera koji nisu sigurni sta sledece savladati.&lt;/p&gt;
&lt;p&gt;📝: Stranica je u razvoju.&lt;/p&gt;
&lt;h2 id=&quot;dodatni-izvori&quot;&gt;Dodatni izvori&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Inspiracija, &lt;a target=&quot;_blank&quot; href=&quot;https://blog.petrovic.gr//sr/2016/12/vodic-za-ucenje-web-programiranja-frontend-pristup/&quot;&gt;Vodic za ucenje web programiranja&lt;/a&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>Optimizacija sajta za pretrazivace</title>
    <link href="https://webdevlpr.com/posts/optimizacija-sajta-za-pretrazivace/"/>
    <id>https://webdevlpr.com/posts/optimizacija-sajta-za-pretrazivace/</id>
    <updated>2022-01-25T19:33:53Z</updated>
    <summary>SEO vodic za web developere. Osvrt na standarde koji se mogu ispuniti direktno na sajtu, a koje Google odobrava. Fokus nisu teme za marketare.</summary>
    <content type="html">&lt;p&gt;SEO ili optimizacija web stranice za internet pretrazivace sluzi za &lt;em&gt;povecanje kvaliteta saobracaja koji je usmjeren prema sajtu&lt;/em&gt; preko prirodnih (organskih ili algoritamskih) rezultata pretrage.&lt;/p&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 2;&quot;&gt;Marketari i &lt;em&gt;SEO strucnjaci&lt;/em&gt; se bave optimizacijom web stranice. To uglavnom &lt;em&gt;nisu web developeri&lt;/em&gt; i izostavljene su mnoge teme.&lt;/p&gt;
&lt;p&gt;Znacaj ovog polja se vidi i u tome da visoko rangiranje na Google-u moze vrijediti milione eura. Sta web stranicu cini efektivnom?&lt;/p&gt;
&lt;h2 id=&quot;kvalitetan-sadrzaj-%E2%99%9B&quot;&gt;Kvalitetan sadrzaj ♛&lt;/h2&gt;
&lt;p&gt;Jedna od losih metrika za SEO je ukoliko korisnik odmah po posjeti web stranice izgubi interesovanje da cita sarzaj i vrati se na rezultate pretrage. Ovo se naziva &lt;i&gt;bounce rate&lt;/i&gt; — stopa korisnika koji su posjetili sajt, ali nisu pronasli sadrzaj koji ih zanima.&lt;/p&gt;
&lt;p&gt;Zasiceni smo nepotrebnim informacijama i svjetlucavim naslovima, a ono sto korisnik prvo vidi ga treba navesti da zeli procitati vise. Najbolji adut za izbjegavanje visokog bounce rate je sto kvalitetniji sadrzaj.&lt;br /&gt;
Takav sadrzaj ce podsticati vrijeme zadrzavanja korisnika na stranici (&lt;i&gt;dwell time&lt;/i&gt;) koji je vazniji i od vjerovatnoce da ce korisnik kliknuti link kada se sajt pojavi u rezultatima (&lt;i&gt;click-through rate&lt;/i&gt; CTR).&lt;/p&gt;
&lt;p&gt;Druge vazne metrike:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;prosjecno trajanje sesije (&lt;i&gt;session duration&lt;/i&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;prosjecan broj pregledanih stranica po sesiji (&lt;i&gt;number of pages viewed per session&lt;/i&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ove i druge podatke o saobracaju na sajtu je moguce pratiti sa &lt;a target=&quot;”_blank”&quot; href=&quot;https://analytics.google.com/analytics/web/&quot;&gt;Google Analitikom&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;xml-sitemap-a&quot;&gt;XML Sitemap-a&lt;/h3&gt;
&lt;p&gt;Botovi pretrazivaca posjecuju linkove i sadrzaj na stranicama da bi se indeksirao sajt. Ukoliko web stranice nisu indeksirane one se nece prikazivati u rezultatima pretrage (&lt;i&gt;search engine results page&lt;/i&gt; SERP). Sitemap-a pomaze pretrazivacima, kao sto je Google, da pronadju sve linkove i prepoznaju koje web stranice sajt sadrzi.&lt;/p&gt;
&lt;p&gt;Sajtovi koji mogu imati benefit od ovog fajla:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sitemap ne moze imati negativan uticaj — tako da svi?&lt;/li&gt;
&lt;li&gt;Koji zele bolju vidljivost medju pretrazivacima&lt;/li&gt;
&lt;li&gt;Sajt sa velikim brojem web stranica jer botovi pretrazivaca mogu propustiti linkove&lt;/li&gt;
&lt;li&gt;Sajt koji ima web stranice, a koje nisu povezane u mrezu linkova&lt;/li&gt;
&lt;li&gt;Novi sajt koji zeli podici nivo optimizacije&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;kako-kreirati-xml-sitemap-u%3F&quot;&gt;Kako kreirati XML Sitemap-u?&lt;/h4&gt;
&lt;p&gt;Moguce je generisati je sa &lt;a target=&quot;_blank&quot; href=&quot;https://www.xml-sitemaps.com/&quot;&gt;XML-Sitemaps&lt;/a&gt;. Potrebno je kopirati link sajta i preuzeti generisani .xml fajl. Preuzeti fajl treba smjestiti u glavni (root) folder: &lt;code&gt;https://www.example.com/sitemap.xml&lt;/code&gt;. Potom registrovati XML Sitemap-u na &lt;a href=&quot;https://www.google.com/webmasters/tools/home&quot;&gt;Google Search konzoli&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;robots.txt&quot;&gt;Robots.txt&lt;/h3&gt;
&lt;p&gt;Pomocu dadoteke &lt;code&gt;robots.txt&lt;/code&gt; je moguce kontrolisati kojim folderima i fajlovima koji botovi mogu pristupiti i koji sadrzaj mogu indeksirati. &lt;code&gt;robots.txt&lt;/code&gt; moze sadrzati jedno ili vise pravila. Svako pravilo blokira ili dozvoljava pristup odredjenom botu pretrazivaca ka odredjenoj web stranici.&lt;/p&gt;
&lt;p&gt;Osim ako je navedeno suprotno, implicitno je dozvoljeno indeksiranje cijelog sadrzaja. U sledecem primjeru su postavljena dva pravila:&lt;/p&gt;
&lt;pre class=&quot;language-txt&quot;&gt;&lt;code class=&quot;language-txt&quot;&gt;# Googlebot i AdsBot je dozvoljeno sve osim&lt;br /&gt;# http://example.com/nogb/&lt;br /&gt;User-agent: Googlebot&lt;br /&gt;User-agent: AdsBot-Google&lt;br /&gt;Disallow: /nogb/&lt;br /&gt;&lt;br /&gt;# Svim drugim korisnickim agentima je dozvoljeno da indeksiraju&lt;br /&gt;# cijeli sajt. Izostavljanje ovog pravila ima isti rezultat.&lt;br /&gt;User-agent: *&lt;br /&gt;Allow: /&lt;br /&gt;&lt;br /&gt;# Link do XML Sitemap-e&lt;br /&gt;Sitemap: http://www.example.com/sitemap.xml&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Fajl se postavlja u glavni (root) folder &lt;code&gt;https://www.example.com/robots.txt&lt;/code&gt;. Vise o &lt;a target=&quot;_blank&quot; href=&quot;https://developers.google.com/search/docs/advanced/robots/create-robots-txt&quot;&gt;robots.txt&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;upotreba-ispravnog-html-koda&quot;&gt;Upotreba ispravnog HTML koda&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Semanticni HTML&lt;/em&gt; je upotreba HTML elemenata koji jacaju semantiku i znacenje informacija na web stranici. Semanticni elementi jasno komuniciraju sa pretrazivacom sta je &lt;em&gt;znacenje stranice i njenog sadrzaja&lt;/em&gt;. Ta jasnoca osigurava da na upit pretrazivaci isporuce najbolje rezultate.&lt;/p&gt;
&lt;p&gt;Nesemanticni tagovi poput &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; i &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; ne govore vise o sadrzaju.&lt;/p&gt;
&lt;figure style=&quot;max-width: 300px;&quot;&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/semantic-html.png&quot; alt=&quot;Semantic and non-semantic HTML&quot; /&gt; 
 &lt;figcaption&gt;Primjer semanticnog HTML koda.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Neki od tagova o kojima se cesto govori su tagovi za naslove gdje najveci znacaj ima &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;. Lista semanticnih &lt;a target=&quot;_blank&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Glossary/Semantics&quot;&gt;tagova&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;meta-podaci&quot;&gt;Meta podaci&lt;/h3&gt;
&lt;p&gt;Meta elementi nisu vidljivi na stranici i sluze da bi pretrazivacu pruzile &lt;em&gt;vise informacija o web stranici&lt;/em&gt;. Pretrazivac koristi ove podatke da bi shvatio o cemu je sajt, kada ga treba ponuditi kao rezultat i kako ga prezentovati na stranici sa rezultatima (SERP).&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Naslov treba biti do 60 karaktera&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;description&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;Optimalna duzina opisa je 160 karaktera&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;keywords&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;HTML, CSS, JS&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;author&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;John Doe&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;link&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://example.com/&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;canonical&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Element &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; se prikazuje kao naslov na stranici sa rezultatima (SERP) i u tabu pretrazivaca kada je stranica otvorena.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Od &lt;code&gt;&amp;lt;meta name=&#39;description&#39;&amp;gt;&lt;/code&gt; ne ovisi da li ce pretrazivac ponuditi sajt kao rezultat, ali sluzi korisniku pri odabiru web stranice i utice na stopu klikanja (CTR). Prikazuje se na stranici sa rezultatima (SERP).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;rel=&amp;quot;canonical&amp;quot;&lt;/code&gt; govori pretrazivacu koji link se indeksira kada postoji nekoliko razlicitih URL adresa koje vode ka istoj web stranici poput: &lt;code&gt;https://www.example.com/&lt;/code&gt; ili &lt;code&gt;https://example.com/index.html&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;data-nosnippet-atribut&quot;&gt;&lt;code&gt;data nosnippet&lt;/code&gt; atribut&lt;/h3&gt;
&lt;p&gt;Nekada pretrazivac ignorise opis koji je obezbjedjen kroz &lt;code&gt;&amp;lt;meta name=&amp;quot;description&amp;quot; content=&amp;quot;&amp;quot;&amp;gt;&lt;/code&gt; tag i umjesto njega postavi sadrzaj sa stranice po svom nahodjenju (algoritmu) po kom bi prikazani tekst mozda vise bio od pomoci korisnikovom upitu.&lt;/p&gt;
&lt;p&gt;Iako prikazani isjecak nije faktor rangiranja, on utice na korisnika da odabere odredjeni rezultat sto dalje utice na stopu klikanja (CTR). Da bi sprijecili Google da koristi odredjeni sadrzaj kao isjecak za opis moguce je koristiti &lt;code&gt;data nosnippet&lt;/code&gt; atribut u sklopu &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; ili &lt;code&gt;&amp;lt;section&amp;gt;&lt;/code&gt; taga.&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  Sadrzaj u paragrafu moze biti ukljucen u isjecak&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;data-nosnippet&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; ali ovaj dio ne bi bio prikazan. &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;robots-meta&quot;&gt;Robots meta&lt;/h4&gt;
&lt;p&gt;Robots meta element govori pretrazivacima da li da indeksiraju web stranicu:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;”robots”&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;”noindex,nofollow”&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- or --&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;”robots”&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;”index,follow”&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;follow&lt;/i&gt; pretrazivac ce pratiti sve linkove na toj web stranici&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;index&lt;/i&gt; pretrazivac indeksira cijelu web stranicu&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;nofollow&lt;/i&gt; pretrazivac nece pratiti sve linkove na toj web stranici&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;noindex&lt;/i&gt; pretrazivac nece indeksirati tu web stranicu&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;meta-socijalne-mreze&quot;&gt;Meta socijalne mreze&lt;/h4&gt;
&lt;p&gt;Ovi meta tagovi omogucavaju sinhronizaciju i kontrolu prikaza web stranice pri dijeljenju na nekoj socijalnoj mrezi.&lt;/p&gt;
&lt;figure style=&quot;max-width: 450px;&quot;&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/twitter-card.JPG&quot; alt=&quot;How a website looks like when shared on Twitter&quot; /&gt; 
 &lt;figcaption&gt;Kako izgleda web stranica kada se podijeli na Twitteru&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;em&gt;Open graph&lt;/em&gt; meta tagovi integrisu web stranicu sa raznim mrezama poput Facebook, LinkedIn, Discord itd. &lt;em&gt;Twitter&lt;/em&gt; ima vrijednosti koje funkcionisu na identican nacin. Izgled se moze provjeriti na sajtovima poput: &lt;a target=&quot;”_blank”&quot; href=&quot;https://typefully.com/twitter-card-validator&quot;&gt;Twitter validator kartica&lt;/a&gt; a neke druge mreze se mogu provjeriti na &lt;a target=&quot;”_blank”&quot; href=&quot;https://www.opengraph.xyz/&quot;&gt;Open Graph&lt;/a&gt;. Oni ne moraju biti potpuno ispravni pa je mozda bolje provjeriti direktno na platformama.&lt;br /&gt;
&lt;a href=&quot;https://webdevlpr.com/https://developers.facebook.com/tools/debug/&quot;&gt;Sharing Debugger&lt;/a&gt; je bio koristan za rjesavanje FaceBook problema.&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- OG ili Open graph--&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;og:type&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;article&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;og:title&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;Naziv stranice&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;og:description&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;Opis sajta&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;og:image&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;Link do slike&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;og:url&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;Link stranice&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;og:site_name&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;Naziv sajta&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- Twitter--&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;twitter:title&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;Naziv stranice&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;twitter:description&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;Opis sajta&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;twitter:image&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;Link do slike&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;twitter:site&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;@username&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;twitter:creator&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;@username&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;atributi-schema&quot;&gt;Atributi schema&lt;/h3&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://schema.org/&quot;&gt;Schema.org&lt;/a&gt; je projekat zajednice sa misijom da stvaraju, odrzavaju i promovisu &lt;em&gt;seme za strukturirane podatake na internetu&lt;/em&gt;. Diskutabilno je da li ovi atributi povecavaju rangiranje sajta pri pretrazivanju nekog upita, ali oni omogucavaju definisanje dodatnih meta podataka o sadrzaju na web stranici. Takvi podaci pomazu pretrazivacu da interpretiraju sadrzaj ispravno na stranici sa rezultatima pretrazivanja (SERP).&lt;/p&gt;
&lt;p&gt;Jedni od primjetnijih primjena ovih atributa u rezultatima se vide pri pretrazivanju nekog proizvoda, usluge ili recepta koji je ocijenjen.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://webdevlpr.com/static/img/scheme.JPG&quot; alt=&quot;How Google interpets schema attributes for a recipe&quot; /&gt; 
 &lt;figcaption&gt;Google prikazuje ocjenjen recept u rezultatima&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Seme su podjeljene u &lt;a target=&quot;_blank&quot; href=&quot;https://schema.org/docs/schemas.html&quot;&gt;tipove&lt;/a&gt;, a svaki tip je povezan sa skupom atributa. Neki od njih su za knjige, filmove, muziku, recepte, serije, zdravlje, organizaciju, osobu, mjesto, lokalni posao, restoran, proizvod, ponudu, recenziju itd.&lt;/p&gt;
&lt;p&gt;Koncept ovih meta podataka se moze vidjeti u kodu ispod:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;itemscope&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;itemtype&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://schema.org/Recipe&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;itemprop&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Mom&#39;s Red Lentils&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  By &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;itemprop&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;author&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;John Smith&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;,&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;itemprop&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;datePublished&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;2009-05-08&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;May 8, 2009&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;img&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;itemprop&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;image&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;bananabread.jpg&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;alt&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;Banana bread on a plate&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;itemprop&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;description&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;This classic banana bread recipe comes from my mom -- the walnuts add a&lt;br /&gt;    nice texture and flavor to the banana bread.&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  Prep Time: &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;itemprop&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;prepTime&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;PT15M&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;15 minutes Cook time:&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;itemprop&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;cookTime&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;PT1H&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;1 hour Yield:&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;itemprop&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;recipeYield&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;1 loaf&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; Tags:&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;link&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;itemprop&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;suitableForDiet&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://schema.org/LowFatDiet&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;Low&lt;br /&gt;  fat&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token attr-name&quot;&gt;itemprop&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;nutrition&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token attr-name&quot;&gt;itemscope&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token attr-name&quot;&gt;itemtype&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://schema.org/NutritionInformation&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    Nutrition facts:&lt;br /&gt;    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;itemprop&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;calories&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;240 calories&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;,&lt;br /&gt;    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;itemprop&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;fatContent&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;9 grams fat&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  Ingredients: -&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;itemprop&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;recipeIngredient&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;3 or 4 ripe bananas, smashed&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; -&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;itemprop&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;recipeIngredient&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;1 egg&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; -&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;itemprop&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;recipeIngredient&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;3/4 cup of sugar&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  Instructions:&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;itemprop&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;recipeInstructions&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    Preheat the oven to 350 degrees. Mix in the ingredients in a bowl. Add the&lt;br /&gt;    flour last. Pour the mixture into a loaf pan and bake for one hour.&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Strukturirani podaci se mogu testirati u ovim &lt;a target=&quot;_blank&quot; href=&quot;https://developers.google.com/search/docs/advanced/structured-data&quot;&gt;validatorima&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;pristupacnost&quot;&gt;Pristupacnost&lt;/h3&gt;
&lt;h4 id=&quot;responzivan-i-prilagodjen-dizajn&quot;&gt;Responzivan i prilagodjen dizajn&lt;/h4&gt;
&lt;p&gt;Prisustvo &lt;code&gt;&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;...&amp;quot;&amp;gt;&lt;/code&gt; linije ukazuje pretrazivacu da je stranica prilagodjena mobilnim uredjajima i kako treba kontrolisati dimenzije i skaliranje stranice. Ovim sajtovima se daje prednost, ali osim ove linije potrebno je definisati ponasanje stranice kroz CSS inace bi sadrzaj mogao izgledati losije sa ovom linijom.&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;viewport&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;width=device-width, initial-scale=1.0&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;slike&quot;&gt;Slike&lt;/h4&gt;
&lt;p&gt;Pretrazivaci ne mogu citati slike koje cine kljucni dio web stranica. Zato slike koriste &lt;em&gt;alt&lt;/em&gt; atribut za pristupacnost. U pretrazi za slikama pretrazivac se vodi alternativnim tekstom.&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;img&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;alt&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;Opis fotografije&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;linkovi-i-veze&quot;&gt;Linkovi i veze&lt;/h4&gt;
&lt;p&gt;Pretrazivac ce pratiti izlazne linkove na sajtu da bi zakljucio da li web stranica nudi kvalitetan sadrzaj i o cemu se na njoj radi. Ako linkovi vode ka sajtovima sa kredibilitetom to je plus. Sa &lt;em&gt;rel&lt;/em&gt; atributom je moguce naglasiti pretrazivacu da ne treba pratiti odredjeni link.&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;#&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;nofollow&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Koristiti &lt;i&gt;nofollow&lt;/i&gt; za linkove u koje nemamo povjerenja&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;Sponsored&lt;/i&gt; za sponzorisane&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;Ugc&lt;/i&gt; za one koje su generisali korisnici (user generated content)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;brzo-ucitavanje-sadrzaja&quot;&gt;Brzo ucitavanje sadrzaja &lt;i role=&quot;img&quot; aria-label=&quot;JavaScript&quot; title=&quot;JavaScript&quot; class=&quot;fas fa-bolt&quot;&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p&gt;Brzina ucitavanja stranice igra jos znacajniji faktor u rangiranju od kada su pametni telefoni preuzeli vecinu saobracaja na internetu. Oni mogu sporije ucitavati sadrzaj jer koriste mobilne podatke ili jer kod sajta nije ispravno prilagodjen manjim ekranima.&lt;/p&gt;
&lt;p&gt;Brzina je samo jos jedan od faktora kvalitetnog korisnickog iskustva i Google preporucuje da ovo vrijeme bude &lt;em&gt;ispod dvije sekunde&lt;/em&gt;, ali da cilj treba biti ispod pola sekunde.&lt;/p&gt;
&lt;p class=&quot;tip right-tip&quot; style=&quot;--span-row: 1;&quot;&gt;Brzina se moze testirati na: &lt;a target=&quot;”_blank”&quot; href=&quot;http://developers.google.com/speed/pagespeed/insights&quot;&gt;PageSpeed Insights&lt;/a&gt;, &lt;a target=&quot;”_blank”&quot; href=&quot;http://developers.google.com/web/tools/lighthouse&quot;&gt;Lighthouse&lt;/a&gt;, &lt;a target=&quot;”_blank”&quot; href=&quot;http://gtmetrix.com/&quot;&gt;GTmetrix&lt;/a&gt;, &lt;a target=&quot;”_blank”&quot; href=&quot;https://tools.pingdom.com/&quot;&gt;Pingdom&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;optimizacija-koda&quot;&gt;Optimizacija koda&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Kompresija i minimizacija koda&lt;/li&gt;
&lt;li&gt;Upotreba hostinga sa CDN-om (content delivery network)&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Upotreba generatora statickog sajta (static site generator) kao &lt;a target=&quot;_blank&quot; href=&quot;https://www.11ty.dev/&quot;&gt;11ty&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Upotreba caching pretrazivaca&lt;/li&gt;
&lt;li&gt;Skloniti JavaScript koji blokira ucitavanje sadrzaja (render blocking Javascript)&lt;/li&gt;
&lt;li&gt;Izbjegavanje preusmjeravnja stranica&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;smanjiti-javascript-koji-blokira-ucitavanje-sadrzaja&quot;&gt;Smanjiti JavaScript koji blokira ucitavanje sadrzaja&lt;/h3&gt;
&lt;p&gt;Prije nego pretrazivac prikaze stranicu on mora napraviti DOM stablo rasclanjivanjem HTML elemenata. Tokom procesa, kad god se pojavi skripta, pretrazivac mora sacekati da se preuzme i izvrsi, potom nastaviti kreiranje DOM stabla.&lt;/p&gt;
&lt;p&gt;Preporucuje se smanjiti upotrebu JavaScripta, posebno eksternih skripti koji se moraju preuzeti prije izvrsavanja. One koje su neophodne je:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Moguce staviti &lt;i&gt;inline&lt;/i&gt; u sam dokument unutar &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; taga, ali ovaj sarzaj treba biti kratak i brzo se izvrsavati&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Skripte koje nisu kljucne za inicijalno prikazivanje bi trebale biti asinhrone (&lt;i&gt;asynchronoasius&lt;/i&gt;) ili odlozene (&lt;i&gt;deferred&lt;/i&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;text/javascript&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;span class=&quot;token language-javascript&quot;&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;/* ono sto bi bio sadrzaj manje JavaScript datoteke */&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;my.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- Skripta ce biti preuzeta paralelno sa rasclanjivanjem stranice i izvrsena cim bude dostupna --&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;defer&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;my.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- Skripta ce biti preuzeta paralelno sa rasclanjivanjem stranice i izvrsena nakon sto stranica zavrsi rasclanjivanje --&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;optimizacija-slika&quot;&gt;Optimizacija slika&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;&lt;i&gt;Kompresija fotografija&lt;/i&gt;: &lt;a target=&quot;”_blank”&quot; href=&quot;https://shortpixel.com/&quot;&gt;Shortpixel&lt;/a&gt;, &lt;a target=&quot;_blank&quot; href=&quot;https://imageresizer.com/&quot;&gt;Image Resizer&lt;/a&gt;, &lt;a target=&quot;_blank&quot; href=&quot;https://compressjpeg.com/&quot;&gt;Compress JPEG&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Navodjenje velicine fotografije kroz width i height&lt;/li&gt;
&lt;li&gt;Primjena lijenog ucitavanja (lazy loading)&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Koristenje &lt;code&gt;srcset&lt;/code&gt; atributa za razlicite velicine ekrana&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;dodatni-linkovi&quot;&gt;Dodatni linkovi&lt;/h3&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://moz.com/learn/seo/seo-cheat-sheet&quot;&gt;SEO Cheat Sheet za Web Developere&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
</feed>