Avatar billede dnz Nybegynder
18. marts 2001 - 12:56 Der er 10 kommentarer og
1 løsning

noget med arrays i objekter...

hjælp jeg js begynder og vil gerne lave noget klasse-agtigt med denne lille skoleopg. - men jeg kan ikke finde ud af hvordan jeg får \"indhold\" til at fungere som et array...

function IndkoebsKurv(indhold, saldo){
this.indhold = indhold;
this.saldo = saldo;
this.visIndhold() = visIndhold() ;
this.tilfoej(bog) = tilfoej(bog);
this.slet() = slet();
}   

nedenstående giver fejl: \"indhold\" er ikke et objekt :

function visIndhold(){
for (i=0; i<4; i++);      
document.write(this.indhold [i].titel+ \"<br>\");
}
Avatar billede dnz Nybegynder
18. marts 2001 - 12:58 #1
istedet for 4 tallet skulle der stå this.indhold.length
Avatar billede torbenkoch Nybegynder
18. marts 2001 - 13:09 #2
Inden du bruger indhold som array skal du skrive dette:

  indhold = new Array();

Så burde det virke!
Avatar billede jakoba Nybegynder
18. marts 2001 - 13:49 #3
Hvis visindhold, tilfoej og slet er funktioner der skal ligge i indkøbskurven skal der IKKE () efter idet du lægger dem ind.
dvs:

function visIndhold() { ... };
function tilfoej( bog ) { ... };
function slet() { ... };

function IndkoebsKurv(indhold, saldo){
this.indhold = new Array();
this.saldo = saldo;
this.visIndhold = visIndhold;
this.tilfoej = tilfoej;
this.slet = slet;
};

du kan sætte indstillingerne i din brovser så den fortælle når den finder en javascript fejl. fejlmeldingene er sølle men bedre end ingenting.

mvh JakobA
Avatar billede dnz Nybegynder
18. marts 2001 - 14:49 #4
jeg sender lige noget mere kode
fejlmeddelelse: array is undefined

function Bog(indeks, titel, forfatter, pris, billedref)
{
        this.indeks = indeks;
        this.titel = titel;
                this.forfatter = forfatter;
        this.pris = pris;
        this.billedref = billedref;
} 

function IndkoebsKurv(indhold, saldo)
{   
    this.indhold = new array();
    this.saldo = saldo;
        this.visIndhold = visIndhold;
        this.tilfoej = tilfoej;
        this.slet = slet;
}   

function tilfoej(bog)
{
      this.indhold.push(bog);
      this.saldo = this.saldo + bog.pris;
}

function visIndhold()
{
      for (i=0; i<4; i++);      
      document.write(this.indhold[i].titel + \"<br>\");
}

function slet()
{
      this.indhold.splice(bog);
      this.saldo = this.saldo - bog.pris;
}
Avatar billede jakoba Nybegynder
18. marts 2001 - 14:56 #5
Array er et foruddefineret objekt i javascript. Det skal staves med stort A
    this.indhold = new Array();

mvh JakobA
Avatar billede torbenkoch Nybegynder
18. marts 2001 - 14:59 #6
Som jeg jo også skrev - husk at JavaScript er følsomt over for store og små bogstaver - dvs. case-sensitivt - gad vide om der er et kort dansk udtryk for det?? :-)
Avatar billede jakoba Nybegynder
18. marts 2001 - 15:00 #7
pas forresten på med parametre der har samme navn som en property i this. Det har jeg haft problemer med.
Det er sikrere at kalde parametrene noget andet:

function IndkoebsKurv(indhold2, saldo2) { 
    this.indhold = new array();
    this.saldo = saldo2;
        this.visIndhold = visIndhold;
        this.tilfoej = tilfoej;
        this.slet = slet;
};

mvh JakobA
Avatar billede dnz Nybegynder
18. marts 2001 - 17:06 #8
her er hele opg. - hjælp det virker stadig ikke - hvis jeg kan giver jeg 30 points til den der gider rette skidtet til...

<!-- saved from url=(0022)http://internet.e-mail -->
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">

<html>
<head>
    <title>Untitled</title>
</head>

<body>

<SCRIPT language = JavaScript>

//Objektvariabler

function Bog(indeks, titel, forfatter, pris, billedref)
{
       
    this.indeks = indeks;
    this.titel = titel;
        this.forfatter = forfatter;
    this.pris = pris;
    this.billedref = billedref;
} 

function IndkoebsKurv(indhold2, saldo2)
{
    this.indhold = new Array();
    this.saldo = saldo2;
        this.visIndhold = visIndhold;
        this.tilfoej = tilfoej;
        this.slet = slet;
}   

function tilfoej(bog)
{
      this.indhold[this.indhold.length] = bog;
      this.saldo = this.saldo + bog.pris;
}

function visIndhold()
{
      for (i=0; i<this.indhold.length; i++);      
      document.write(this.indhold[i].titel + \"<br>\");
}

function slet(index)
{
      this.saldo = this.saldo - this.indhold[index].pris; 
      this.indhold[index] = null; 
}

//metoder

function udskriv(bs)
{
for (i=0; i<4; i++);
document.write(bs[i].forfatter + \"<br>\");
}

// skabelse bøger og  bogsamling
Bog0 = new Bog(1,\"Javascript Application Cookbook\",\"Jerry Bradenbaugh\",360,\"b1.gif\");
Bog1 = new Bog(2,\"Internet and WWW How to program \",\"Deitel & Deitel\",450,\"b2.gif\");
Bog2 = new Bog(3,\"DHTML For the World Wide Web\",\"Jason C. Teague\",250,\"b3.gif\");
Bog3 = new Bog(4,\"Building Web Applications with UML\",\"Jim Conallen\",300,\"b4.gif\");

bogSamling = [Bog0,Bog1,Bog2,Bog3];// varebeholdning = bogSamling

//skabelse af indkøbskurv
Kurv = new IndkoebsKurv();

//brugscenarie 1.3
//varebeholdning();
Kurv.tilfoej(bogSamling[0]);
Kurv.visIndhold();
//varebeholdning();
Kurv.tilfoej(bogSamling[1]);
Kurv.visIndhold();
Kurv.slet(1);
Kurv.visIndhold();
//bestillingsformular();

udskriv(bogSamling)

</script>

</body>
</html>
Avatar billede jakoba Nybegynder
18. marts 2001 - 18:08 #9
Nu er der ihvertfald noget der virker. Jeg har sat kommentar ved der jeg har ændret noget.
Den vigtigste rettelse var nok at tilfæje en  return this;  sætning i dine constructor funktioner.

<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">
<html>
<head>
    <title>Untitled</title>
<META NAME=\"Generator\" CONTENT=\"Stone\'s WebWriter 3\">
</head>

<body>

<SCRIPT language = JavaScript>

var debugOn = true;        // en lille debugger
function debug ( str ) {
  if ( debugOn ) debugOn = confirm( str );
}; //end debug ( string )

//Objektvariabler

function Bog(indeks2, titel2, forfatter2, pris2, billedref2) {
    this.indeks    = indeks2;
    this.titel    = titel2;
    this.forfatter = forfatter2;
    this.pris      = pris2;      // parameternavne gjort
    this.billedref = billedref2;  // forskellige fra properties
    return this;                  // returnerer objektet.
};

function IndkoebsKurv() {    // fjernet parametre (bruges ikke)
    this.indhold = new Array();
    this.saldo = 0;          // sat startsaldo til 0 (tom kurv)
    this.visIndhold = visIndhold;
    this.tilfoej = tilfoej;
    this.slet = slet;
    return this;                  // returnerer objektet.
} 

function tilfoej(bog) {
      this.indhold[this.indhold.length] = bog;
      this.saldo = this.saldo + bog.pris;
};
function visIndhold() {
      for (i=0; this.indhold.length>i; i++)        // ; fjernet   
        document.write(this.indhold[i].titel + \"<br>\");
};
function slet(index) {
  if ( this.indhold.length>index ) {    // check om varen findes
      this.saldo = this.saldo - this.indhold[index].pris;
      for ( i=index; (this.indhold.length-1)>i; i++ )
        this.indhold[index] = this.indhold[index+1];
      this.indhold.length = this.indhold.length-1;
  } else
    alert( \"kan ikke slette var nr \"+index +\" i kurven\" );
};

//metoder

function udskriv(bs) {
  for (i=0; 4>i; i++)                            // ; fjernet
    document.write(bs[i].forfatter + \"<br>\");
}

// skabelse bøger og  bogsamling
Bog0 = new Bog(1,\"Javascript Application Cookbook\",\"Jerry Bradenbaugh\",360,\"b1.gif\");
Bog1 = new Bog(2,\"Internet and WWW How to program \",\"Deitel & Deitel\",450,\"b2.gif\");
Bog2 = new Bog(3,\"DHTML For the World Wide Web\",\"Jason C. Teague\",250,\"b3.gif\");
Bog3 = new Bog(4,\"Building Web Applications with UML\",\"Jim Conallen\",300,\"b4.gif\");

bogSamling = new Array(Bog0,Bog1,Bog2,Bog3);  // varebeholdning = bogSamling
            // erstattet [ og ] med  new Array(  og  ) . (vist overflødigt)

//skabelse af indkøbskurv
Kurv = new IndkoebsKurv();

//brugscenarie 1.3
//varebeholdning();
Kurv.tilfoej(bogSamling[0]);
Kurv.visIndhold();
//varebeholdning();
Kurv.tilfoej(bogSamling[1]);
Kurv.visIndhold();
Kurv.slet(1);
Kurv.visIndhold();
//bestillingsformular();

udskriv(bogSamling)

</script>

</body>
</html>
Avatar billede dnz Nybegynder
18. marts 2001 - 20:03 #10
super Jakoba..

Det virker - tak for det.
Jeg kunne desværre ikke finde ud af at forhøje indsatsen, men hvis du ved hvordan man gør kan du lige skrive det til mig.

(det var selvfølgelig den sidste kommentar jeg mente)

Hvis du skriver, må du også gerne anbefale en god js bog...

vh dnz
Avatar billede jakoba Nybegynder
18. marts 2001 - 23:13 #11
Det er OK. Du skal jo helst have nogen points tilbage til i kan ribbe dig for imorgen :-))

Desværre. Jeg har aldrig læst en js-bog og ved ikke hvilke der er gode. Det
jeg mest bruger er \"Client-Side JavaScript Reference\" der ligger på nettet på
http://developer.netscape.com/docs/manuals/js/client/jsref/index.htm
den er god at slå op i, men ikke ligefrem en lærebog.

mvh JakobA
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