# 18.6. Studio: Classes¶

## 18.6.1. Before You Start¶

If you are enrolled in a LaunchCode program, access this studio by following the repl.it classroom links posted in your class at learn.launchcode.org.

## 18.6.2. Getting Started¶

Let's create a class to handle new animal crew candidates!

Edit the practice file as you complete the studio activity.

## 18.6.3. Part 1 - Add Class Properties¶

1. Declare a class called `CrewCandidate` with a `constructor` that takes three parameters---`name`, `mass`, and `scores`. Note that `scores` will be an array of test results.
2. Create objects for the following candidates:
1. Bubba Bear has a mass of 135 kg and test scores of 88, 85, and 90.
2. Merry Maltese has a mass of 1.5 kg and test scores of 93, 88, and 97.
3. Glad Gator has a mass of 225 kg and test scores of 75, 78, and 62.

Use `console.log` for each object to verify that your class correctly assigns the key/value pairs.

## 18.6.4. Part 2 - Add First Class Method¶

As our candidates complete more tests, we need to be able to add the new scores to their records.

1. Create an `addScore` method in `CrewCandidate`. The function must take a new score as a parameter. Code this function OUTSIDE of `constructor`. (If you need to review the syntax, revisit Assigning Class Methods).
2. When passed a score, the function adds the value to `this.scores` with the push array method.
3. Test out your new method by adding a score of `83` to Bubba's record, then print out the new score array with `objectName.scores`.

## 18.6.5. Part 3 - Add More Methods¶

Now that we can add scores to our candidates' records, we need to be able to evaluate their fitness for our astronaut program. Let's add two more methods to `CrewCandidate`---one to average the test scores and the other to indicate if the candidate should be admitted.

### 18.6.5.1. Calculating the Test Average¶

1. Add an `average()` method outside `constructor`. The function does NOT need a parameter.
2. To find the average, add up the entries from `this.scores`, then divide the sum by the number of scores.
3. To make the average easier to look at, round it to 1 decimal place, then return the result from the function.

Verify your code by evaluating and printing Merry's average test score (92.7).

### 18.6.5.2. Determining Candidate Status¶

Candidates with averages at or above 90% are automatically accepted to our training program. Reserve candidates average between 80 - 89%, while probationary candidates average between 70 - 79%. Averages below 70% lead to a rejection notice.

1. Add a `status()` method to `CrewCandidate`. The method returns a string (`Accepted`, `Reserve`, `Probationary`, or `Rejected`) depending on a candidate's average.
2. The `status` method requires the average test score, which can be called as a parameter OR from inside the function. That's correct - methods can call other methods inside a class! Just remember to use the `this` keyword.
3. Once `status` has a candidate's average score, evaluate that score, and return the appropriate string.
4. Test the `status` method on each of the three candidates. Use a template literal to print out ```'___ earned an average test score of ___% and has a status of ___.'```

## 18.6.6. Part 4 - Play a Bit¶

Use the three methods to boost Glad Gator's status to `Reserve` or higher. How many tests will it take to reach `Reserve` status? How many to reach `Accepted`? Remember, scores cannot exceed 100%.

Tip

Rather than adding one score at a time, could you use a loop?