JavaScript Object-Oriented JavaScript Getters and Setters Creating Setter Methods

arturop
arturop
Full Stack JavaScript Techdegree Graduate 16,160 Points

Cannot read property 'toLowerCase' of undefined

Hi, I can't find the mistake. "cannot read property 'toLowerCase' of undefined.

Thanks.

creating_setters.js
class Student {
    constructor(gpa, credits){
        this.gpa = gpa;
        this.credits = credits;
        this._major 

    }

    stringGPA() {
        return this.gpa.toString();
    }

    get level() {
        if (this.credits > 90 ) {
            return 'Senior';
        } else if (this.credits > 60) {
            return 'Junior';
        } else if (this.credits > 30) {
            return 'Sophomore';
        } else {
            return 'Freshman';
        }
    }
     set major(major){
      if(major === "Junior" || major === "Senior"){
        this._major = major;
      }else if(major === "Freshman" || major === "Sophomore"){
        this._major = "None";
      }
     }

}

var student = new Student(3.9, 60);
student.major = "Junior"

1 Answer

Steven Parker
Steven Parker
203,722 Points

That error message itself is confusing, but it looks like a couple of things were added to the code that are not part of the instructions. One is an incomplete statement in the constructor, and another is a line added to the bottom that alters the "student" record.

After removing those, you'll get a completely different result: "Bummer: It appears that no backing property _method was set in the setter method" And if you look at the tests being done in the "major" setter, you'll see that the passed argument is being compared to the level names instead of the actual level ("this.level").