Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

JavaScript Object-Oriented JavaScript Getters and Setters Creating Setter Methods

Nick Huemmer
seal-mask
.a{fill-rule:evenodd;}techdegree seal-36
Nick Huemmer
Front End Web Development Techdegree Graduate 26,840 Points

What's wrong in my syntax for this challenge?

Hi all, I've spent too much time iterating over this challenge - I can't figure out how to properly implement the if and else conditionals for this challenge. What's wrong in my setter syntax?

class Student {
    constructor(gpa, credits){
        this.gpa = gpa;
        this.credits = credits;
    }

    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';
        }
    }

    get major() {
        return this._major;
    }

    set major(major) {
       if (this.level === 'Junior' || this.level === 'Senior') {  
       this._major = major;      
      } else {
      return 'none';
         }  
  }
}

var student = new Student(3.9, 5);

student.major = 'French';
console.log(student.major);

1 Answer

You're not following this direction in the else branch:

If the student is only a Freshman or Sophomore, set the "_major" backing property equal to 'None'.

You're returning - when it should be similar to the if branch, just set to the desired string instead of the parameter.

Let me know if this helps!

Nick Huemmer
seal-mask
.a{fill-rule:evenodd;}techdegree seal-36
Nick Huemmer
Front End Web Development Techdegree Graduate 26,840 Points

That helps, I now get 'none' for credits less than 30. Here's the updated code (for anyone that may need this in the future):

class Student {
    constructor(gpa, credits){
        this.gpa = gpa;
        this.credits = credits;
    }

    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';
        }
    }

    get major() {
        return this._major;
    }

    set major(major) {
       if (this.level === 'Junior' || this.level === 'Senior') {  
       this._major = major;      
      } else {
      this._major = 'none';
         }  
  }
}

var student = new Student(3.9, 9);

student.major = 'French';
console.log(student.major);

This works completes the challenge. Thank you!

np! You can mark this question as solved by selecting a "best answer". :+1: