30. oktober 2003 - 00:01Der er
20 kommentarer og 2 løsninger
Forskel mellem location.href og location
Hvad er forskellen egentlig mellem om man skriver document.location.href, document.location, window.location.href, og window.location? Såvidt jeg kan se, giver de alle 4 den samme URL.
Oprindeligt, da man overhovedet opfandt LiveScript (som senere blev til javascript ,-) var der defineret en del uafhængige objekter ...
Et af disse uafhængige objekter var location, som dengang (1995) ikke havde nogen sammenhæng med andre entiteter ...
-- Idag har location.objektet en faktisk tilknytning til både window.objektet og document.objektet, men da man stadig kan udelade window. betyder det, at man under alle omstændigheder kan adressere location uden at angive tilknytningen -- det er det samme objekt man tilgår med document.location, window.location og location ...
-- forskellen på location og location.href er at hvis man spørger på et objekt, vil det returnere en .toString og præcis location-objektets toString-metode returnerer .href !-)
Et object er et overordnet begreb, en kasse. Objectet indeholder nogle egenskaber (properties) og typisk nogle metoder. Location objectet indeholder nogle egenskaber, en af dem er href, og det er vel den der bruges oftest. Den indeholder også search, som er den tekststreng der kommer efter ? i urlen, hash som er det der kommer efter # i urlen, og nogle flere. Når man skriver window.location.href betyder det: vi skal have fat i kassen som er vindue-objectet, inde i den kasse skal vi have fat i location-objectet, og i den kasse skal vi have fat i href-egenskaben. Document og Window er tit det samme. Der er lidt gnidder omkring det, da et window kan indeholde flere frames, iframes osv. og ikke alle browsere er enige om hvad der er hvad.
-- de skulle gerne være _helt_ enige om window og document jvf. www.w3c.org som har fastlagt hvordan objekt-modellen skal være ...
-- men da en frame er et window.objekt kommer vi til den situation, at et window kan indeholde et (eller mange) andre window-objekter (måske i mange generationer !-)
For så bare lige at gøre det endnu enklere !o] kan et document også indeholder window.objekter -- nemlig iframes ...
-- Forøvrigt har du helt ret i, at det kan være svært at gennemskue, da man i nogle situationer skal adressere et andet objekt afhængig af hvor man tager fat i det ...
-- f.eks. skal visse events, som man indsætter handlers til i <body>-tagget adresseres fra document.objektet andre fra window.objektet !-)
Jaja, bare fordi det står i w3c, betyder det ikke at der er nogen af browser producenterne der er enige om det. Det er jo det der er hele problemet. Hvis de alle fulgte w3c, så ville det jo pludselig være meget nemmere at x-browse. I min gamle html bog er der altid tre kolloner, hvad w3c mener, hvad netscape mener og hvad ie mener. Men det er da rigtigt at dom'men hedder window.document.osv.
Well, nu ved jeg godt, hvad et objekt er (men tak alligevel for den forklaring...det hjalp mig faktisk til at forstå det bedre :), det jeg mente var hvad roenving mente med at "spørge" på et objekt?
x-browser er når man programmerer til forskellige browsere, krydsbrowser. Hvis du skal have fat i document.location.href spørger du til den str_url = document.location.href, og den returnerer en streng.
Man kan jo spørge et objekt om værdien af en egenskab (property) på objektet, men spørger man direkte på objektet, vil de fleste objekter returnere den værdi, som objektets .toString-metode er sat til !-)
-- og som sagt er loaction-objektets .toString-metode det samme som .href ...
Hvis du spørger på andre obejkters værdi, vil du opleve nogle lidt forskellige reaktioner:
nu = new Date();
vil nu og nu.getTime() returnere det samme (nemlig antallet af 1000-dele sekunder siden 1/1-1970 !-)
Mens
arr = new Array(); arr.fest = "Jul";
vil en forespørgsel på arr alene returnere ingenting !-)
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.