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>
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.
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 ;)
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.
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, '', ' '));