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 Getter Methods

tal Shnitzer
PLUS
tal Shnitzer
Courses Plus Student 5,242 Points

getter function - what is wrong with the switch statement?

I get that my conditional return the wrong level:

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

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

  get level() {
    switch (this.credits) {
  case (this.credits>90):
    return 'Senior';
    break;
  case (this.credits<=90 && this.credits>=61):
    return 'Junior';
    break;
  case (this.credits<=60 && this.credits>=31):
    return 'Sophomore';
    break;
  case (this.credits<=30 ):
    return 'Freshman';
    break;
   default: 
        return 'Freshman';
   }
  }
}

const student = new Student(3.9);

can anyone tell me whats wrong with it?

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

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

  get level() {
    switch (this.credits) {
  case (this.credits>90):
    return 'Senior';
    break;
  case (this.credits<=90 && this.credits>=61):
    return 'Junior';
    break;
  case (this.credits<=60 && this.credits>=31):
    return 'Sophomore';
    break;
  case (this.credits<=30 ):
    return 'Freshman';
    break;
   default: 
        return 'Freshman';
   }
  }
}

const student = new Student(3.9);
tal Shnitzer
tal Shnitzer
Courses Plus Student 5,242 Points

this is the task: Inside the getter method use the conditional statement of your choice to determine the level of the student. If the value of the "credits" property is over 90, return 'Senior'. If it's between 61 and 90, return 'Junior'. If it's between 31 and 60, return 'Sophomore'. If it's 30 or less, return 'Freshman'.'

2 Answers

Use an if statement

  • I don't know why but with an if statement and the same conditionals it works fine (the challenge wants you to make one).
  • Replace the initialization of student with this:
const student = new Student(3, 9);

use a comma to make the 9 the second parameter.

Here is a final shorten version:

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 > 61) {
        return 'Junior';
    } else if (this.credits > 31) {
        return 'Sophomore';
    } else {
        return 'Freshman';
    }
  }
}

const student = new Student(3, 9);

Hope this helps;

Andrew Huang
Andrew Huang
5,563 Points

You should put the "expression" in switch(), not property

so code corrected as blow code:

Before

  get level() {
    switch (this.credits) {     // expression 
  case (this.credits>90):
    return 'Senior';

After

  get level() {
    switch (true) {     // expression 
  case (this.credits>90):
    return 'Senior';