3 votes

"Undefined" à la fin de l'accumulateur.value()

Je me suis heurté au problème de l'erreur de valeur dans les constructor function method this.result . Je ne comprends pas pourquoi j'obtiens le résultat de la fin de l'opération. function - undefined ...

Dites-moi s'il vous plaît, ce qui est oublié d'inclure dans le function :(

function Accumulator(startingValue) {
    this.startingValue = startingValue;

    this.read = function() {
        this.a = +prompt('Your digit: ', '');
    };

    this.value = function() {
        this.value += this.a;
    };

    this.result = function() {
        return this.value + this.startingValue;
    }
}

var accumulator = new Accumulator(1); // starting value 1
accumulator.read(); // sum prompt with current value
accumulator.read(); // sum current prompt with previous prompt and current value
console.log( accumulator.result() ); // display sum result

5voto

Bergi Points 104242

Si .value est censé être un nombre entier, ne le définissez pas comme une fonction :-)

Je pense que tu devrais laisser tomber .value() , .startingValue y .a et utiliser simplement .value partout. Mettez la somme directement dans le read méthode. Simplifier pour :

function Accumulator(startingValue) {
    this.value = startingValue;

    this.read = function() {
        // the temporary variable might be unnecessary but I left it in for verbosity
        const a = +prompt('Your digit: ', '');
        this.value += a;
    };

    this.result = function() {
        return this.value;
    };
}

var accumulator = new Accumulator(1); // starting value 1
accumulator.read(); // add prompt to current value
accumulator.read(); // add another prompt to current value
console.log( accumulator.result() ); // display sum by calling result() method

Vous pouvez également définir les méthodes sur le prototype :

function Accumulator(startingValue) {
    this.value = startingValue;
}
Accumulator.prototype.read = function() {
    this.value += +prompt('Your digit: ', '');
};
Accumulator.prototype.result = function() {
    return this.value;
};

et même utiliser des class syntaxe, comme l'a suggéré @ArtificialBug :

class Accumulator {
    constructor(startingValue) {
        this.value = startingValue;
    }
    read() {
        this.value += parseInt(prompt('Your digit: ', ''), 10);
    }
    result() {
        return this.value;
    }
}

1voto

gurvinder372 Points 16722

Il y a deux problèmes

this.value = function() {
    this.value += this.a; //this.value is a function
};

et

 console.log( accumulator.value ); // accumulator value is a function which needs to be invoked

Faites-le.

function Accumulator(startingValue) {
    this.startingValue = startingValue;

    this.read = function() {
        this.a = (this.a || this.startingValue ) + +prompt('Your digit: ', '');//initialize and add the prompted value
    };

    this.value = function() {
        return this.a; //simply return the value
    };

    this.result = function() {
        return this.a + this.startingValue; //this.a instead of this.value
    }
}

var accumulator = new Accumulator(1); 
accumulator.read(); 
accumulator.read(); 
console.log( accumulator.value() ); // invoke the method

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X