Ser man på os som biologiske maskiner, giver det nok væsentligt mere mening i at være ekspert i, hvordan disse maskiners brændsel sammensættes mest optimalt - samt hvordan de bedst vedligeholdes. Så kan man altid spørge os kropsbevidsthedspygmæer til råds om noget så naturfjernt som programmering. Der er absolut ingen skam i ikke at være kodeekspert *o)
Objektorientering er en lidt omfangsrig ting at forklare. Som udgangspunkt kan man dog sige, at det er en afspejling af den måde, vi i forvejen opfatter os selv og hele vores omverden.
Et objekt er en instans af en klasse. Objektet har nogle egenskaber (properties) og metoder (noget, objektet kan gøre/udføre). En metode er blot en funktion, der er knyttet til objektet.
Jeg er således en instans af klassen
Menneske. Enkelthederne omkring, hvordan jeg blev instantieret vil jeg overlade til fantasien - men
programmatisk ville det se sådan ud:
var ole = new Menneske();
Vi tager et par af objektets properties:
var foo = ole.haircolor; // foo indeholder nu 'gray'
var bar = ole.age; // bar indeholder nu '56'
- og et par metoder:
ole.eat("steak", "potatoes", "salad", "gravy");
var snoring = false;
ole.sleep(snoring);
I JavaScript ligger alle globale funktioner og variabler (funktioner og metoder, der er erklæret
udenfor funktioner) faktisk som metoder og properties på
window objektet:
var foo = "bar";
alert(window.foo); // Returnerer 'bar'
// Du kunne såmænd også skrive:
window.alert(window.foo); // Returnerer stadig 'bar'
Globale funktioner og variabler siges at have
namespace'et
window.
Et statisk namespace kan oprettes som et statisk objekt. Et namespace kan
i den forbindelse opfattes som kasser/skuffer, man opbevarer og ordner sine variabler og metoder i. Her opretter jeg således to namespaces ved hjælp af et par objekter:
foo = {
methA: function(argA, argB){/* Gør noget */},
methB: function(argA, argB){/* Gør noget andet */},
propA: "En eller anden streng"
};
bar = {
methA: function(argA, argB){/* Gør noget nyt */},
methB: function(argA, argB){/* Gør noget helt fjerde */},
propA: "En fuldstændig anden streng"
};
var fooBar = bar.propA;
var baz = foo.methB(fooBar, "bavl");
alert(baz);
Så kan du pludselig bruge ret korte og stadig sigende navne til variabler og funktioner, der gør næsten det samme - men i forskellig kontekst. Når man for alvor objektorienterer sin kode, bruger man dog ikke kun den statiske objekter, men hovedsagelig objekter instantieret med constructor funktioner (se link nedenfor).
Derudover er der en hel masse ting omkring arv fra klasse til instans - og hvordan nye klasser, der udvider bestående klasser arver fra disse, osv, osv.
En forsigtig begyndelse med lidt simple eksempler kunne være
denne side.
Håber, dette lillebitte crash-kursus gav begyndelsen til forståelse af objekter og objektorientering =)