Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Custom counting method in JavaScript

For learning purposes I’ve created a JS-File.
I implemented a Method inside the JS-Object to get a BookStorage counter.
The thing is everytime I add Books the Browser gives me back the default value for the Object. Anyone have an Idea?

Here is some snippets of my Code:

Book-Class:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

class Book{
constructor(
    name,
    quantity
){
    this.name = name,
    this.quantity = quantity
}
showStorage(param) {
    if(param != null){
        return this.quantity + param;
        this.quantity += param;
    }
        else {return this.quantity;}
    }
}

Main-Script:

    import Book from "./Book.js"

const lordOfRings = new Book(
  "Lord of the Rings",
  10
)

console.log("The Book:", lordOfRings.name);
console.log("The number in Storage:", lordOfRings.showStorage());
console.log("Adding 10 Books to storage:", lordOfRings.showStorage(10));
console.log("Adding 10 Books to storage:", lordOfRings.showStorage());
console.log("New Storage amount of Books:", lordOfRings.showStorage(10));

My expected output was:

"Lord of the Rings"
10
20
20
30

Instead of that I get:

"Lord of the Rings"
10 
20 
10 
20 

>Solution :

The problem is because in a function, the return should be the last line.

The return statement ends function execution and specifies a value to be returned to the function caller. (MDN Docs)

Since the function execution ends, it means the code after the return statement is never executed.

I recommend debugging your code using a code execution visualizer

Here’s part of your code. You tried to change the value of this.quantity after the return statement.

showStorage(param) {
    if(param != null){
        return this.quantity + param; // This doesn't change the value of this.quantity. It just returns that value + 10 (in your example). The value of `this.quantity` is always the same.

        // This line does not run because it's after the return statement
        this.quantity += param;
    }
        else {return this.quantity;}
    }
}

Here’s a minimal fix. You need to increment the value of this.quantity, then return it.

showStorage(param) {
    if(param != null){
        this.quantity += param;
        return this.quantity;
    }
        else {return this.quantity;}
    }
}

Here’s a refactor taking into account comments from Ivar and Cristian Traìna

showStorage(param) {
    if(param){ // an empty `param` is `undefined`, not `null` as the commenter said above.
        this.quantity += param;
    }
    return this.quantity;
}

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading