4 svar
605 visningar
nutella143 74 – Fd. Medlem
Postad: 17 feb 2019 16:11 Redigerad: 17 feb 2019 16:37

anropa metod

får inte till så att metoden summa() ska anropas med en alertruta när man trycker på knappen..

 

 

<script>

class frukt
{
constructor(name,pris,antal)
{
this.name = name;
this.pris = pris;
this.antal = antal;
}

summa()
{
return this.pris * this.antal;
}

}

frukter= [];

frukter[0] = new vara("jordgubbar",5,10);
frukter[1] = new vara("äpple",8,4);


totalpris=0;
for(i=0;frukter.length > i;i++)
{
alert( frukter[i].name +": "+ frukter[i].pris +"kr "+ frukter[i].antal +"st " );

totalpris = totalpris + frukter[i].summa();

}


</script>

<body>

<form>
<input type="button" value="Tot pris" onclick="alert('Totalpris: ' +summa.call(totalpris))" > >
</form>
</body>

emilg 478
Postad: 17 feb 2019 19:54

Var försöker du köra den här koden? Om det är i Chrome, tryck Ctrl + Shift + J för att komma till konsolen så kan du se vilka fel din kod genererar. (Övriga webbläsare har också något liknande).

Lite svårt att se exakt vad du försöker göra. Du har ju alert-funktionen inuti en for-loop där också. (Tips: använd console.log("sträng") istället så kan du se i konsolen istället för att få massa popups).

Har du glömt en klass vara? Du skriver new vara(...) men det finns ingen som heter vara.

nutella143 74 – Fd. Medlem
Postad: 18 feb 2019 15:26
emilg skrev:

Var försöker du köra den här koden? Om det är i Chrome, tryck Ctrl + Shift + J för att komma till konsolen så kan du se vilka fel din kod genererar. (Övriga webbläsare har också något liknande).

Lite svårt att se exakt vad du försöker göra. Du har ju alert-funktionen inuti en for-loop där också. (Tips: använd console.log("sträng") istället så kan du se i konsolen istället för att få massa popups).

Har du glömt en klass vara? Du skriver new vara(...) men det finns ingen som heter vara.

 

det är jag som missat ändra namnet där på vara hehe

kod:


<script>

class frukt
{
constructor(name,pris,antal)
{
this.name = name;
this.pris = pris;
this.antal = antal;
}

summa()
{
return this.pris * this.antal;

}

frukter= [];

frukter[0] = new frukter("jordgubbar",5,10);
frukter[1] = new frukter("äpple",8,4);


totalpris=0;
for(i=0;frukter.length > i;i++)
{
alert( frukter[i].name +": "+ frukter[i].pris +"kr "+ frukter[i].antal +"st " );

totalpris = totalpris + frukter[i].summa();


</script>

<body>

<form>
<input type="button" value="Tot pris" onclick="alert('Totalpris: ' +summa.call(totalpris))" > >
</form> 
</body>

 

det jag vill är att totalpriset ska visas när man trycker på knappen.. vill anropa metoden summa.. men det är något jag gör fel där kan bara inte se vad... startar den i chrome så ska kolla som du skrev ;)

Laguna Online 28471
Postad: 18 feb 2019 16:03

Nu står det "new frukter" fast klassen heter frukt.

Har koden som räknar ut totalpris körts när du trycker på knappen? I så fall kan det stå

onclick="alert('Totalpris: ' +totalpris)"

skulle jag tro.

Ironboy 15 – Fd. Medlem
Postad: 15 jun 2020 15:58

Jag misstänker att du vill skapa en varukorg, kunna lägga till och ta bort varor ur den, räkna ut radsummor och totalsumma?

I så fall rekommenderar jag två klasser Basket (varukorg) och Item (vara). En item har ett namn och ett pris (samt i ett riktigt shoppingsystem troligen också ett unikt varunr/id). 

Varukorgen håller reda hur många av varje vara kunden vill köpa, låter en lägga till och ta bort varor, samt ändra kvantitet. Den kan även räkna ut radsummor och totalsummor.

Här är logiken för detta:


class Basket {

  constructor() {
    this.inBasket = [];
  }

  checkItem(item) {
    // Kontrollera att item är en instans av Item
    // (JavaScript är löst typat, så en typcheck behövs runtime)
    if (!(item instanceof Item)) {
      throw (new Error('You can only add items to the basket!'));
    }
  }

  add(item, quantity) {
    this.checkItem(item);
    // Hitta raden varan finns på i korgen
    let row = this.inBasket.find(row => row.item === item);
    // Om varan inte finns sedan tidigare lägg till en ny rad i korgen
    row = row || { item, quantity: 0 };
    row.quantity === 0 && this.inBasket.push(row);
    // Lägg till kvantiteten
    row.quantity += quantity;
   // Ta bort varan om den nya kvantiteten är 0
   row.quantity || this.removeFromBasket(item);
  }

  remove(item) {
    this.checkItem(item);
    // Leta efter varan i korgen
    let row = this.inBasket.find(row => row.item === item);
    let index = this.inBasket.indexOf(row);
    // Om den finns ta bort den
    index >= 0 && this.inBasket.splice(index, 1);
  }

  // Beräkna radsummor och summor
  get contents() {
    // radsummor
    let data = {
      rows: this.inBasket.map(
        row => ({ ...row, sum: row.item.price * row.quantity })
      )
  }
  // totalsumma
  data.total = data.rows.reduce((total, { sum }) => total + sum, 0);
  return data;
  }

}


class Item {
  constructor(name, price) {
    this.name = name;
    this.price = price;
  }
}


// Test

// Skapa en varukorg
let basket = new Basket();

// Skapa några items
let items = [
['Ansiktsmask', 29.90],
['Borrmaskin', 235.50],
['Cirkelsåg', 699.90]
].map(x => new Item(...x));
console.log('All items', items);

// Lägg till dem i varukorgen
// (5 ansiktsmakser, 3 borrmaskiner, 2 cirkelsågar)
basket.add(items[0], 5);
basket.add(items[1], 1);
basket.add(items[1], 2);
basket.add(items[2], 2);

// Titta på varukorgens innehåll
console.log('Korgens innehåll',
JSON.stringify(basket.contents, '', ' '));

// Ta bort en vara
basket.remove(items[1]);
console.log('Korgens innehåll (inga borrmaskiner)',
JSON.stringify(basket.contents, '', ' '));

Svara Avbryt
Close