ECMAScript Objekt Användning

Skapandet och förstörandet av objekt sker under JavaScript-exekveringen, och att förstå innebörden av denna paradigm är avgörande för att förstå hela språket.

Declarering och instansiering

Objekt skapas genom att använda nyckelordet new följt av namnet på den klass som skal instansieras:

var oObject = new Object();
var oStringObject = new String();

Första raden skapar ett exempel på Object-klassen och lagrar det i variabeln oObject. Andra raden skapar ett exempel på String-klassen och lagrar det i variabeln oStringObject. Om konstruktorn inte har några parametrar är parentesen inte nödvändig. Därför kan de två raderna ovan skrivas om på följande sätt:

var oObject = new Object;
var oStringObject = new String;

Objektreferenser

I de föregående kapitlen har vi introduceratKonceptet med referenstyperI ECMAScript kan man inte komma åt objektets fysiska representation, utan bara till dess referens. Varje gång ett objekt skapas lagras referensen till objektet i variabeln, inte objektet självt.

Objektsavskrivning

ECMAScript har en insamlingsprogram (garbage collection routine) för oanvända lagringsenheter, vilket innebär att det inte är nödvändigt att specifikt förstöra objekt för att frigöra minne. När det inte finns några referenser till ett objekt kallas det för avskrivet (dereference). När insamlingsprogrammet för oanvända lagringsenheter körs förstörs alla avskrivna objekt. Varje gång en funktion har kört sitt kod, körs insamlingsprogrammet för oanvända lagringsenheter för att frigöra alla lokala variabler, och i vissa andra oönskade fall körs insamlingsprogrammet för oanvända lagringsenheter också.

Att sätta alla referenser till objektet till null kan tvinga bort objektet. Till exempel:

var oObject = new Object;
// Gör något med objektet här
oObject = null;

När variabeln oObject sätts till null finns det ingen referens till det första skapade objektet. Detta innebär att objektet kommer att förstöras nästa gång minnesrengöringsprogrammet körs.

Det är en bra vana att avskaffa objekt efter användning för att frigöra minne. Detta säkerställer också att du inte använder objekt som inte längre är nåbara, vilket förhindrar programmeringsfel. Dessutom har gamla webbläsare (som IE/MAC) inte en fullständig programvara för att samla in oanvända minnesenheter, så objekt kan inte alltid förstöras korrekt när sidan laddas ner. Att avskaffa objekt och alla dess egenskaper är den bästa metoden för att säkerställa korrekt minnesanvändning.

Observera:Var försiktig när du avskaffar alla referenser till ett objekt. Om ett objekt har två eller fler referenser måste du sätta alla referenser till null för att korrekt avskaffa objektet.

Tidig och sen bindning

Binding innebär metoder för att koppla ihop objektets gränssnitt med objektets instans.

Tidig bindning (early binding) innebär att man definierar objektets egenskaper och metoder innan objektet instansieras, vilket gör att kompileraren eller tolkaren kan översätta till maskinkod i förväg. I språk som Java och Visual Basic kan man med tidig bindning använda IntelliSense (en funktion som tillhandahåller en lista över objektets egenskaper och metoder för utvecklaren) i utvecklingsmiljön. ECMAScript är inte ett starkt typat språk och stöder inte tidig bindning.

Å ena sidan, sen bindning (late binding) innebär att kompileraren eller tolkaren inte känner till objektets typ innan körningen. Genom att använda sen bindning behöver man inte kontrollera objektets typ, utan bara kontrollera om objektet stöder egenskaper och metoder. Alla variabler i ECMAScript använder metoden för sen bindning. Detta gör det möjligt att utföra ett stort antal objektoperationer utan några straff.