đŸ—ƒïžJavascript og objektet

Objektene i javascript er i praksis lik datastrukturen ordbok (🙈 dictionary). Javascript har vel egentlig ingen formening om klasser slik klassiske objektorienterte sprĂ„k har. Joda.. vi har selvfĂžlgelig nĂžkkelordet class og uteseendet pĂ„ det som kommer etter, men egentlig sĂ„ er jo dette bare syntaktisk sukker 💏 som skjuler litt av virkeligheten.

Javascript er prototypisk, slik at klassen er ikke en klasse slik som i klassisk OOP: en oppskrift pÄ hva et objekt er, men mer som en levende ting som det nye objektet har en link til, eller en relasjon med. Prototypen kan pÄvirke tilstanden til andre objekter og lever i beste velgÄende nÄr programmet kjÞrer og kan bÄde fÄ nye og bli fratatt gamle metoder.

Den levende modellen blir liggende bak i prototypekjeden.


❓ Hva er en prototypekjede

Prototype Chain.. prototypekjede.. jeg prĂžver meg.. đŸ˜ș

NÄr du f.eks lager objekter eller arrays (lister? matriser? hva blir egentlig ett godt norks ord for det?) i Javascript, sÄ delegeres oppfÞrselen fra prototypen. Den arver pÄ en mÄte det som trengs:

const catArray = ['Pelle Katt', 'Pusur', 'Tom'];

og sÄ kjÞrer du Object.getPrototypeOf(catArray):

prototypekjeden til catArray

Lots of goodies.

Prototypekjeden er altsĂ„ slik vi fĂ„r til arv i Javascript. Vi bygger nye objekt basert pĂ„ gamle. PÅ den mĂ„ten kan vi ordne til noe OOP-lignende greier. Du nĂ„r, som du ser, prototypen via Object.getPrototypeOf(objektetDuVilSjekkeUt), eller evt. objektetDuVilSjekkeUt.__proto__.

prototypekjeden



đŸ—ïž Lage objekter i Javascript


1ïžâƒŁ Object constructor:

Trenger vel ikke si sÄ mye?

  var object = new Object();

2ïžâƒŁ create meteoden pĂ„ Object:

Her kan du ogsÄ f.eks lage et objekt uten en prototype (altsÄ uten Ä linke til Object.prototype)

  var object = Object.create(null);

null


3ïžâƒŁ Object literal, bokstavelig talt:

  var object = {};

4ïžâƒŁ Med new operatĂžren:

Dette er i hovedsak det class gjĂžr i bakkanten.

function Cat(name) {
   this.name = name;
   this.sound = function () {
      console.log('mjau');
   }
}

const pelle = new Cat("Pelle");

Hvis vi kjÞrer Object.getPrototypeOf(catObj); nÄ:

null

For Ä bygge litt videre pÄ den med prototypekjeden og levende objekter i kjÞretiden og sÄ videre:

Cat.prototype.claws = true;

ville fÞrt til at pelle ogsÄ fikk denne propertien.


5ïžâƒŁ Med `class' syntaksen

Denne kom i ES6 og ligner pÄ det man kjenner igjen fra den tradisjonelle objektorienterte programmeringen med klasser som en oppskrift.

class Cat {
    constructor(name) {
        this.name = name;
        this.sound = function () {
            console.log('mjau');
        };
    }
}

const pelle = new Cat("Pelle");

Den er, som du nĂ„ vet, helt lik 4ïžâƒŁ 😎