Avatar billede themepark Nybegynder
07. oktober 2003 - 03:20 Der er 19 kommentarer og
1 løsning

Problemer med property funktionen

Er der nogle der kan forklare mig, hvor det går galt i følgende lille script?

<SCRIPT LANGUAGE="JavaScript">
var Indeks=2
Array.prototype.Streng=null
Kalender=new Array(2)
for (UgeTaeller=1;UgeTaeller<=Indeks;UgeTaeller++) {
            Kalender[Indeks].Dato="Hejsa"
            alert(Kalender[Indeks].Dato)
}
</SCRIPT>

Jeg får ganske enkelt ingen alert boks :(
Avatar billede thomashove Nybegynder
07. oktober 2003 - 16:07 #1
prøv denne.....

<SCRIPT LANGUAGE="JavaScript">

var Indeks=2;

Kalender = new Array(2);

for (UgeTaeller=1; UgeTaeller<=Indeks; UgeTaeller++)
{
  Kalender[Indeks]="Hejsa";
  alert(Kalender[Indeks]);
}
</SCRIPT>
Avatar billede roenving Novice
08. oktober 2003 - 03:18 #2
Du skal også definere det andet niveau som et array:

<SCRIPT LANGUAGE="JavaScript">
var Indeks=2
Array.prototype.Streng=null
Kalender=new Array(2)
for (UgeTaeller=1;UgeTaeller<=Indeks;UgeTaeller++) {
            Kalender[UgeTaeller] = new Array();
            Kalender[UgeTaeller].Dato="Hejsa"
            alert(Kalender[UgeTaeller].Dato)
}
</SCRIPT>

'-)
Avatar billede themepark Nybegynder
08. oktober 2003 - 07:53 #3
roenving, hvilket andet niveau? Der er jo kun det ene, som jeg definerer med new Array(2)

For øvrigt sjovt at se dig for en gangs skyld lægge et svar med det samme ;)
Avatar billede themepark Nybegynder
08. oktober 2003 - 07:56 #4
roenving, godt set af dig, for øvrigt, at jeg er kommet til at skrive Indeks i stedet for UgeTaeller i []...har lige selv opdaget det :)
Avatar billede themepark Nybegynder
08. oktober 2003 - 07:59 #5
Nej, NU står min JavaScript verden sgu ikke længere :(

roenving, fint nok, det virker...men hvorfor? I min verden burde det der ekstra Array være unødvendigt, da jeg kun skal bruge 1 et-dimensionelt og ikke 1 to-dimensionelt array, eller resette mit array, men det er for mig at se en af de 2 ting, der bliver gjort :(
Avatar billede roenving Novice
12. oktober 2003 - 14:18 #6
Det er fordi det skal defineres enten som et array eller et objekt hvis det skal have attributter på ...
Avatar billede themepark Nybegynder
13. oktober 2003 - 11:13 #7
Jamen, det gør jeg jo med

Kalender=new Array(2)

Og forinden da har jeg med

Array.prototype.Streng=null

oprettet prototypen Streng for alle Array elementer...har jeg så ikke også allerede defineret det som et Array?
Avatar billede roenving Novice
14. oktober 2003 - 05:02 #8
Næh, det gjorde du ikke ...

Hvis k.attribut skal virke skal k defineres som enten et Array() eller et Object() ...
Avatar billede themepark Nybegynder
14. oktober 2003 - 20:13 #9
Jamen...jeg forstår ikke logikken i det her.

Jeg beder dem om at oprette en prototype ved navn Streng for alle elementer, der bliver erklæret med new Array, ikke?

Og derefter erklærer jeg en variabel ved navn Kalender som et new Array, ikke?

Ergo burde det vel allerede der blive defineret, at for begge 2 Kalender arrays skal der være en prototype ved navn Streng, ikke?

Jeg kan godt se, at det ikke er tilfældet...men hvorfor kan jeg ikke se?
Avatar billede roenving Novice
15. oktober 2003 - 16:02 #10
Har du checket om
Kalender[UgeTaeller].Streng="Hejsa"

virker ?-)
Avatar billede themepark Nybegynder
16. oktober 2003 - 07:29 #11
roenving ork ja, den fejl med Indeks opdagede jeg for flere dage siden ;) Men kan du ikke forklare mig logikken i hvorfor man skal erklære hvert enkel array endnu en gang? :)
Avatar billede roenving Novice
16. oktober 2003 - 12:40 #12
Du prototyper en attribut som hedder Streng -- den vil selvfølgelig kun virke hvis du bruger præcis 'Streng' ...

Hvis du skulle have Dato må du jo også sætte den på, men så er det jo nemmere bare at erklære det som et Array, så kan du bruge .hvadSomHelst eller ['hvadSomHelst'] som indeks !-)
Avatar billede themepark Nybegynder
17. oktober 2003 - 09:25 #13
Det er løgn det her...NU forstår jeg hvad du mener...jamen, jeg havde slet ikke SET den fejl :( Jeg kunne bare ikke forstå, hvorfor det var nødvendigt at skulle erklære dem 2 gange...DOH!!! :(
Avatar billede themepark Nybegynder
17. oktober 2003 - 09:38 #14
Okay, det giver stadig ikke rigtigt mening det her...

Nu har jeg rettet fejlen, og har følgende kode:

<SCRIPT LANGUAGE="JavaScript">
var Indeks=2
Array.prototype.Streng=null
Kalender=new Array(2)
for (UgeTaeller=1;UgeTaeller<=Indeks;UgeTaeller++) {
    Kalender[UgeTaeller].Streng=UgeTaeller
    alert(Kalender[UgeTaeller].Streng)
}
</SCRIPT>

Det virker så ikke. Men tilføjer jeg en ekstra linje med new Array()

<SCRIPT LANGUAGE="JavaScript">
var Indeks=2
Array.prototype.Streng=null
Kalender=new Array(2)
for (UgeTaeller=1;UgeTaeller<=Indeks;UgeTaeller++) {
    Kalender[UgeTaeller]=new Array()
    Kalender[UgeTaeller].Streng=UgeTaeller
    alert(Kalender[UgeTaeller].Streng)
}
</SCRIPT>

Og det er det, jeg ikke forstår logikken i, men som jeg gerne vil prøve at forstå logikken i...hvorfor jeg skal generklære hvert enkelt array for at det virker?
Avatar billede roenving Novice
17. oktober 2003 - 12:56 #15
To eksempler fra 'The Javascript Bible' skulle gerne lede dig på vej:

<html>
<head>
<title>String Object Prototype</title>
<script type="text/javascript">
function makeItHot(){
  return "<font color='red'>" + this.toString() + "</font>"
}
String.prototype.hot = makeItHot;
</script>
</head>
<body>
<script type="text/javascript">
document.write("<h1>This site is on " + "FIRE".hot() + "!!</h1>")
</script>
</body>
</html>

-- og det andet:

<html>
<head>
<title>Array prototypes</title>
<script type="text/javascript">
// add prototype to all Array objects
Array.prototype.sponsor = "DG";
a = new Array(5);
b = new Array(5);
c = new Array(5);
// override prototype property for one 'instance'
c.sponsor = "JS";
// this one picks up the original prototype
d = new Array(5);
</script>
</head>
<body><h2>
<script type="text/javascript">
document.write("Array a is brought to you by: " + a.sponsor + "<p>");
document.write("Array b is brought to you by: " + b.sponsor + "<p>");
document.write("Array c is brought to you by: " + c.sponsor + "<p>");
document.write("Array d is brought to you by: " + d.sponsor + "<p>");
</script>
</h2>
</body>
</html>

-- du bruger altså simpelthen prototype i en lidt forkert kontekst !-)
Avatar billede themepark Nybegynder
18. oktober 2003 - 02:13 #16
Jeg kan stadig ikke se det logiske i det...men nevermind, jeg stopper her, før jeg gør dig sindssyg ;)
Avatar billede roenving Novice
18. oktober 2003 - 10:00 #17
Du har stadig ikke fat i, at hvis du prototyper Array, så er det _hele_ arrayet som får attributten og ikke de forskellige forekomster inde i som får attributten !-)

-- men tak for points ;~}
Avatar billede themepark Nybegynder
20. oktober 2003 - 13:31 #18
DEN forklaring gav mening!!! Det vil altså sige at hvis man f.eks. sammenligner med en tabel, så er det selve tabellen, der får den prototype, og IKKE de enkelte celler?
Avatar billede roenving Novice
20. oktober 2003 - 16:55 #19
Præcis, ja !-)
Avatar billede themepark Nybegynder
20. oktober 2003 - 16:57 #20
Aha...men det er altså ikke logisk ;) Ikke i mine øjne, i hvert fald :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester