Quería una manera de encadenar mis funciones junto con este resultado deseado. La calculadora siempre comienza en 0 y llamar a Calculadora inicia el resultado = 0. La calculadora tiene algunas funciones que operan en este valor y se pueden encadenar. Al final de la cadena, llamo a log, que registra el resultado.
En este ejemplo, llamo a Calculadora dos veces y mi resultado deseado es A = 100, B = 4. En cambio, obtengo A = 100, B = 204. Lo entiendo, ya que es el mismo objeto, el resultado no se reinicializa a 0 la 2da vez que lo uso.
const Calculator = { result: 0, addNumber(a) { this.result = this.result + a; return this; }, multiplyNumber(a) { this.result = this.result * a; return this; }, log() { console.log(this.result); } }; // A logs 100 Calculator.addNumber(10).multiplyNumber(10).log(); // B logs 204 instead of 4 Calculator.addNumber(2).multiplyNumber(2).log();¿Hay alguna forma en que pueda reestructurar esto para que la segunda vez que llame a Calculadora, se reinicie a 0 sin usar una clase y definir una nueva Calculadora?
¿Hay alguna forma en que pueda reestructurar esto para que la segunda vez llame a Calculadora?
Nunca llamas a Calculator . No es una función. (Lo sería si lo hicieras una clase).
Si desea restablecerlo a 0 , debe hacerlo explícitamente.
Solo tienes que decidir cuándo quieres hacerlo.
Tienes dos opciones obvias:
logCalculator es un objeto. Parece que está tratando de usar como si estuviera creando un nuevo objeto cada vez que escribe Calculator .
Probablemente quieras hacer algo como esto:
const calculator = () => { return { result: 0, addNumber(a) { this.result = this.result + a; return this; }, multiplyNumber(a) { this.result = this.result * a; return this; }, log() { console.log(this.result); } }; } // logs 100 calculator().addNumber(10).multiplyNumber(10).log(); // logs 4 calculator().addNumber(2).multiplyNumber(2).log();O así:
class Calculator { constructor() { this.result = 0; } addNumber(a) { this.result = this.result + a; return this; } multiplyNumber(a) { this.result = this.result * a; return this; } log() { console.log(this.result); } } // logs 100 (new Calculator()).addNumber(10).multiplyNumber(10).log(); // logs 4 (new Calculator()).addNumber(2).multiplyNumber(2).log();