I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
<ole> Det er ukorrekt brug af delete i JScript :) delete-operatoren i JScript kan ikke slette et objekt - men et element i et objekt eller array (som jo er to forskellige repræsentationer af én og samme datastruktur). Prøv at sætte objektet til null i stedet ;o)
OK, men ifølge javascript implementationen fra netscape kan man godt slette objekter med delete (og det virker jo sådan set også i firefox). Jeg tjekkede lige Jscript, og der står jo godt nok at man kun kan benytte funktionen på objekt-egenskaber og array-elementer.
Men slemt at jeg kan crashe browseren ;-). Jeg tester lige hvordan "null" fungerer.
man skal sætte objektet til "void(null)" for at slette det - jeg prøvede at tjekke typeof() og den påstod at det stadig var et objekt efter at være blevet sat til null.
Jeg går ud fra at det er fordi null er ...ingenting. Og derfor rent faktisk ikke gjorde noget ;-) ?
"Ja, det er naturligvis et object ... men ikke af typen 'Object'"
Hm...nu er jeg ikke sikker på jeg er med :-).
Hvis jeg benytter den metode du foreslår så vil et tjek på typeof() stadig kaste en "object" af sig, hvilket er præcis hvad jeg ønsker at undgå. Der er flere typer end object,string,function,number og undefined?
Jeg ønsker at fjerne alle referencer til et objekt - som om det aldrig havde eksisteret - men også med void(null) metoden er det ikke helt det samme som hvis objektet aldrig havde eksisteret - jeg kan nemlig stadig sige alert(mitObjekt) og istedet for at kaste en fejl af sig så svarer browseren undefined. Måske den garbage collection du snakkede om?
Jeg fornemmer, du er ude på lidt dybt vand i forhold til din benlængde :) Garbage-collection handler om oprydtning af variabler, m.m. Det er præcis, hvad vi taler om her.
Du kan ikke fjerne alle referencer til 'o', men objektet 'o' eksisterer ikke længere som et 'Object', når du har sat det til værdien 'null'. Det eksisterer kun som en tom variabel:
var o = {"myProp":"Værdien af propertyen"}; o = null; o.bla = "Noget nyt"; alert(o); // Her udløses en fejl, da o ikke længere er et Object
Problemet opstår sikkert, fordi du ikke forstår betydningen af begrebet 'object'. Et objekt, der er instantieret ved en af følgende metoder: var o = {};
var o = new Object();
function MyObj(){ return this; } var o = new MyObj();
- har alle typen [object Object]. Det er ikke det samme som typen object :)
OK så sagt på en anden måde så kan man ikke fjerne objektet (eller gå ud fra at det kan lade sig gøre) når det først er skabt? Hvilket samtidig vil sige at den gyldne regel er at tjekke for "null", istedet for at gå ud fra "undefined" ?
"What is done can't be undone" - meget lidt typisk computere i øvrigt...
Og nej, jeg er tabt bag den berømte vogn, men når først teorien blander sig med bugs á la internet explorer, så bliver det sgu' kompliceret :-)
Men tusind tak indtil videre, lærerigt som altid <ole>
Taktak ... Ja, det lyder, somom du er ved at have fanget den :) Nu ved jeg ikke præcist, hvad du kender til JS-objekter og -arrays, men jeg har skrevet denne lille artikel, du måske kan hive lidt info ud af: http://www.eksperten.dk/artikler/227 - om ikke andet står der lidt om array- kontra dot-notaion og hvordan man kan bruge det til dynamisk tilgang til properties :)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.