Home > Software engineering >  Custom counting method in JavaScript
Custom counting method in JavaScript

Time:06-28

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:

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 

CodePudding user response:

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;
}

  • Related