Manipulating an ES6 static class property that is an array
Protected states require enforcement..
Why would you use the possible colors and complicated apple color vetting process when there is no requirement in your code to do so?
You are using a static list (array) in an effort to protect the state of the Apple, or associated states that rely on apples being specific colors.
Maintaining trust in object states is important and allows you to make assumptions and reduce the code complexity. It is also one of the most important methods coders have of controlling our arch nemeses.. The Bug!
But a chain is only as strong as its weakest link. Even if you put a big sign above it saying &quot;Don't yank this pitifully weak link!&quot; you can't trust coders, not even yourself, for one day the convenience is too tempting, and while in a rush to meet a dead line you yank that chain.
const myApple = new Apple();  // Needs to be &quot;Reddish&quot; not &quot;red&quot;
myApple._color = &quot;Reddish&quot;;   // Done, so much easier than wrangling the 
                              // possibleColors static and its dificult siblings

And just like that all the work put into protecting the state of your apple is out the window.
Coders are lazy they will not put up with complications if there is an easy way. Coders want performant code and they are not going to use getters and setters when there is direct access. Putting a sign up &quot;Do not use&quot; (_ as the metaphoric sign &quot;private&quot;) does not stop use.
If you want to control the color of the apple you must make it impossible to change it without the vetting process, or it is pointless, and pointless code is bad code.