« IE scope problem | Main | Referansedokumentasjon »

Språkets kjerne og objektmodeller

JavaScript (/JScript/ECMAScript) er i utgangspunktet ikke et stort og uoversiktlig programmeringsspråk. Grunnen til det er at den koden vi skriver for å manipulere HTML-dokumenter egentlig kan deles i to. En del er selve kjernen av JavaScript, den andre er de objektene browseren tilbyr gjennom sin objektmodell.

Mesteparten av arbeidet ligger i browserens objektmodell. Det er der vinduer, dokumenter, skjemaer og det meste annet er tilgjengelig. Objektmodellen vil variere fra browser til browser, for eksempel har Netscape Navigator v4.x sin egen proprietære objektmodell mens Mozilla hovedsaklig benytter W3Cs Document Object Model. Microsoft Internet Explorer tilbyr både deres egen proprietære modell samt mesteparten av W3Cs DOM, og det er mange likheter mellom disse to.

La oss se på et eksempel på bruk av disse tre objektmodellene. Gitt at vi har følgende element i et HTML-dokument:

<form name="mittSkjema" id="mittSkjema"> ... </form>

Vi har så en variabel 'mittSkjema' og vi ønsker at denne skal være en referanse til skjemaet. Kjernen av språket tilbyr ikke noe om skjemaer, men objektmodellene gjør det. For å opprette referansen kan vi for eksempel gjøre:

var mittSkjema; // variabel for skjemaet

if(document.all) {
  // I Internet Explorers proprietære objektmodell har vi metoden document.all()
  // for å hente ut enkelt-elementer av dokumentet.
  mittSkjema = document.all('mittSkjema');
} else if(document.getElementById) {
  // I W3Cs Document Object Model level 1 tilbys getElementById()
  mittSkjema = document.getElementById('mittSkjema');
} else if(document.forms) {
  // Netscape Navigator 4.x (og DOM level 0) benytter arrayet document.forms[]
  // og krever at skjemaet er navngitt gjennom name-attributtet
  mittSkjema = document.forms['mittSkjema']
}

Mens objektmodellen er veldig omfattende er kjernen av språket ikke voldsomt stor. Tar vi en titt på Netscapes dokumentasjon for kjernen av JavaScript v1.5 ser vi at den består av noen få objekter, globale egenskaper, funksjoner, statements, kommentarer samt de forskjellige operatorene. Det er ikke voldsomt stort og derfor rimelig lett å lære.

Når vi lager Date()-objekter arbeider vi med kjernen av språket. Et eksempel er bruken av disse objektene for å finne ut hvor lang tid det tok å gjøre noe:

var start = new Date();

// ...
// Her ligger koden vi vil vite tidsforbruket for
// ...

var end = new Date();
// Tidsforbruket regnet ut i millisekunder
var timeUsed = end.getTime() - start.getTime();

Dette skillet mellom kjerne og objektmodell er viktig når vi søker svar på spørsmål. Kjernen er dokumentert for seg selv og problemer med den delen av språket må således sjekkes opp mot den dokumentasjonen. Likeledes er vi nødt til å sjekke dokumentasjon for objektmodellen når problemet ligger der. Unntaket fra denne regelen er Netscapes dokumentasjon for JavaScript frem til og med v1.3, hvor de ikke har noe skille overhodet og koker suppe på alt sammen. Det kan være lett forvirrende.

About

This page contains a single entry from the blog posted on Desember 12, 2003 3:45 EM.

The previous post in this blog was IE scope problem.

The next post in this blog is Referansedokumentasjon.

Many more can be found on the main index page or by looking through the archives.