Klasser
Jeg velger å beskrive klasser ut fra siste versjon som er implementert i nettleseren Chrome (mars 2016).
Merk at klasser i js egentlig er objects med pene klær.
Denne linken gir en dypere innføring i javascript klasser - sammenligna med java.
info
I språk som Java,C++,D,C# osv er det et klart skille mellom klasser og instanse.
Klassen er definisjonen - instansen er objektet du bruker.
I javascript er Klassen egentlig et Object (prototype object) og instansen er en kopi av dette objectet. Funksjonaliteten blir den samme ved at kopien har en link til prototypen (som igjen kan ha en videre link). Dette er måten arv implementeres på i js.
caution
Note: The term instance has a specific technical meaning in class-based languages. In these languages, an instance is an individual instantiation of a class and is fundamentally different from a class. In JavaScript, "instance" does not have this technical meaning because JavaScript does not have this difference between classes and instances. However, in talking about JavaScript, "instance" can be used informally to mean an object created using a particular constructor function. So, in this example, you could informally say that jane is an instance of Engineer. Similarly, although the terms parent, child, ancestor, and descendant do not have formal meanings in JavaScript; you can use them informally to refer to objects higher or lower in the prototype chain.
Class
Med siste versjon av js (2020) kan du lage en klasse slik:
Her har jeg definert en ny klasse med navnet Rektangel. Merk at jeg må definere klassen før jeg bruker den, klasser blir ikke hoisted (flyttet til toppen av scopet) slik som funksjoner.
En klasse kan bare ha én funksjon med navnet constructor. Det er denne funksjonen som kjøres når du lager en ny instans (en variabel av klassen, slik som r1 er en instans av klassen Rektangle).
Dersom du tester koden over i consol (ctrl+shift+j) (copy paste koden inn i consol, trykk deretter enter) og så skriver r1 og trykker enter, da viser chrome:
Dette sier oss at variabelen r1 er av typen Rektangel og har innhold {height: 30, width: 40}.
Eksempel - definisjon av en klasse for elev
Eksempel - definisjon av Sprite
For å plasser/flytte ting rundt på skjermen lager vi ofte en Sprite klasse.
Den inneholder nok info til å kunne legge noe på skjermen på en bestemt plass (x,y) og med en bestemt størrelse (w,h). I eksemplet under bruker vi en div som det grafiske elementet - dette kunne selvsagt vært kode for å tegne på canvas eller svg.
I eksemplet med spriteTree over kan vi selvsagt også bruke div.innerHTML til å vise tekst.
spriteTree.div.innerHTML = "noe text". Denne kunne være med i render() dersom klassen har noen tekstegenskaper som skal vises.
Utviding av en enkel klasse (slik som Sprite)
Vi har flere ting på skjermen som er Sprite - de kan plasseres, men vi trenger ting som kan bevege seg med en gitt fart/retning. Vi lager en ny klasse som utvider Sprite:
Denne klassen (Movable) virker greit for ting som skal bevege seg rett fram, men dersom vi har krav om at noen ting på skjermen skal kunne snu seg (rotere) slik at det ser ut som de peker den veien de går - da lager vi en ny klasse:
Bruk av klassene Sprite, Movable og Turnable
En liten kjørbar demo med Sprite, Movable og Turnable
Lag et nytt prosjekt i vs-code og legg inn koden under. Koble css og js som vanlig
{% tabs %} {% tab title="HTML" %}
{% endtab %}
{% tab title="CSS" %}
{% endtab %}
{% tab title="JS" %}
{% endtab %} {% endtabs %}