Search code examples
javascriptundefinedjavascript-objects

Getting a "not defined" error in my JavaScript code when I think it is defined


I am working on a project for SkillCrush and am getting a "not defined" error, when I feel as though I've defined the variable at the top of the code. I 100% know I'm doing something wrong, but not sure what. Any suggestions?

var createPolitician = function (name)
{
    var politician = {}; //is this not defined here?
    politician.name = name;
    politician.electionResults = null;
    politician.totalVotes = 0;

    return politician;
};

var oscar = createPolitician("Oscar Jiminez");
var luke = createPolitician("Luke Spencer");

oscar.electionResults = [5, 1, 7, 2, 33, 6, 4, 2, 1, 14, 8, 3, 1, 11, 11, 0, 5, 3, 3, 3, 7, 4, 8, 9, 3, 7, 2, 2, 4, 2, 8, 3, 15, 15, 2, 12, 0, 4, 13, 1, 3, 2, 8, 21, 3, 2, 11, 1, 3, 7, 2];

luke.electionResults = [4, 2, 4, 4, 22, 3, 3, 1, 2, 15, 8, 1, 3, 9, 0, 6, 1, 5, 5, 1, 3, 7, 8, 1, 3, 3, 1, 3, 2, 2, 6, 2, 14, 0, 1, 6, 7, 3, 7, 3, 6, 1, 3, 17, 3, 1, 2, 11, 2, 3, 1];

oscar.electionResults[9] = 1;
luke.electionResults[9] = 28;

oscar.electionResults[4] = 17;
luke.electionResults[4] = 38;

oscar.electionResults[43] = 11;
luke.electionResults[43] = 27;

console.log(oscar.electionResults);
console.log(luke.electionResults);

politician.countTotalVotes = function() 
{
    this.totalVotes = 0;

    for (var i = 0; i < this.electionResults.length; i++);
    {
        this.totalVotes = this.totalVotes + this.electionResults[i];
    }
}

oscar.countTotalVotes();
luke.countTotalVotes();

console.log(oscar.totalVotes);
console.log(luke.totalVotes);

Error:

"error"
    "ReferenceError: politician is not defined
    at reloyur.js:32:1"

Solution

  • I corrected your mistakes in your code. You could change your code like follows:

    function createPolitician(name)
    {
        var politician = 
        {
            name: name,
            electionResults: null,
            totalVotes: 0,
    
            countTotalVotes: function() 
            {
                //this.totalVotes = 0; <- irrelevant because you use it only one time
                for(var i = 0; i < this.electionResults.length; i++)//";" symbol  on the end is your mistake too
                {
                    this.totalVotes += this.electionResults[i];
                }
    
            }
        };
        return politician;
    };
    
    var oscar = createPolitician("Oscar Jiminez");
    var luke = createPolitician("Luke Spencer");
    
    oscar.electionResults = [5, 1, 7, 2, 33, 6, 4, 2, 1, 14, 8, 3, 1, 11, 11, 0, 5, 3, 3, 3, 7, 4, 8, 9, 3, 7, 2, 2, 4, 2, 8, 3, 15, 15, 2, 12, 0, 4, 13, 1, 3, 2, 8, 21, 3, 2, 11, 1, 3, 7, 2];
    
    luke.electionResults = [4, 2, 4, 4, 22, 3, 3, 1, 2, 15, 8, 1, 3, 9, 0, 6, 1, 5, 5, 1, 3, 7, 8, 1, 3, 3, 1, 3, 2, 2, 6, 2, 14, 0, 1, 6, 7, 3, 7, 3, 6, 1, 3, 17, 3, 1, 2, 11, 2, 3, 1];
    
    oscar.electionResults[9] = 1;
    luke.electionResults[9] = 28;
    
    oscar.electionResults[4] = 17;
    luke.electionResults[4] = 38;
    
    oscar.electionResults[43] = 11;
    luke.electionResults[43] = 27;
    
    console.log(oscar.electionResults);
    console.log(luke.electionResults);
    
    oscar.countTotalVotes();
    luke.countTotalVotes();
    
    console.log(oscar.name, 'has', oscar.totalVotes, 'votes');
    console.log(luke.name, 'has', luke.totalVotes, 'votes');