¿Qué está sucediendo?
const output = document.getElementById('output');
function handleYears() {
let years = [];
let addYear = function(newYear) {
years.push(newYear);
}
let deleteYear = function(yearToDelete) {
years = years.filter(item => item!== yearToDelete)
}
let calculateMaxYear = function() {
return Math.max(...years);
}
return {
years: years,
addYear: addYear,
deleteYear: deleteYear,
calculateMaxYear: calculateMaxYear
}
}
let newHandleYears = handleYears();
newHandleYears.addYear(2001);
newHandleYears.addYear(1999);
newHandleYears.addYear(2000);
newHandleYears.addYear(2002);
output.innerHTML += `<p>Years: ${newHandleYears.years}</p>`;
output.innerHTML += `<p>Maximum year: ${newHandleYears.calculateMaxYear()}</p>`;
output.innerHTML += `<p>Delete item "${newHandleYears.years[newHandleYears.years.length - 1]}" from "years" array.</p>`;
newHandleYears.deleteYear(2002);
output.innerHTML += `<p>Years: ${newHandleYears.years}</p>`;
output.innerHTML += `<p>Maximum year: ${newHandleYears.calculateMaxYear()}</p>`;
body {padding: 0.5rem 1rem;}
<div id="output"></div>
Solución del problema
Debe agregar una this
palabra clave porque está reasignando valor y no tiene que hacerlo de forma automática, ya que está llamando a la misma referencia y presionándola.
const output = document.getElementById('output');
function handleYears() {
let years = [];
let addYear = function(newYear) {
years.push(newYear);
}
let deleteYear = function(yearToDelete) {
this.years = years.filter(item => item!== yearToDelete)
}
let calculateMaxYear = function() {
return Math.max(...this.years);
}
return {
years: years,
addYear: addYear,
deleteYear: deleteYear,
calculateMaxYear: calculateMaxYear
}
}
let newHandleYears = handleYears();
newHandleYears.addYear(2001);
newHandleYears.addYear(1999);
newHandleYears.addYear(2000);
newHandleYears.addYear(2002);
output.innerHTML += `<p>Years: ${newHandleYears.years}</p>`;
output.innerHTML += `<p>Maximum year: ${newHandleYears.calculateMaxYear()}</p>`;
output.innerHTML += `<p>Delete item "${newHandleYears.years[newHandleYears.years.length - 1]}" from "years" array.</p>`;
newHandleYears.deleteYear(2002);
output.innerHTML += `<p>Years: ${newHandleYears.years}</p>`;
output.innerHTML += `<p>Maximum year: ${newHandleYears.calculateMaxYear()}</p>`;
body {padding: 0.5rem 1rem;}
<div id="output"></div>
No hay comentarios.:
Publicar un comentario