Con fines de aprendizaje, he creado un archivo JS. Implementé un Método dentro del JS-Object para obtener un contador de BookStorage. La cuestión es que cada vez que agrego Libros, el Navegador me devuelve el valor predeterminado para el Objeto. ¿Alguien tiene una idea?
Aquí hay algunos fragmentos de mi Código:
Libro-Clase:
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;} } }Guión principal:
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));Mi resultado esperado era:
"Lord of the Rings" 10 20 20 30En lugar de eso, obtengo:
"Lord of the Rings" 10 20 10 20El problema es que en una función, el return debe ser la última línea.
La declaración de devolución finaliza la ejecución de la función y especifica un valor que se devolverá a la persona que llama a la función. ( Documentos de MDN )
Dado que la ejecución de la función finaliza, significa que el código después de la declaración de return nunca se ejecuta.
Recomiendo depurar su código usando un visualizador de ejecución de código
Aquí está parte de su código. Intentó cambiar el valor de this.quantity después de la declaración de return .
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;} } } Aquí hay una solución mínima. Debe incrementar el valor de this.quantity y luego devolverlo.
showStorage(param) { if(param != null){ this.quantity += param; return this.quantity; } else {return this.quantity;} } }Aquí hay un refactor teniendo en cuenta los comentarios de Ivar y 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; }