So what is a prototype?
Prototype according to Merriam-Webster's Dictionary means an original model on which something is patterned. So what does this mean in OOP? Well, you could say a prototype is a template on which objects are created in a program. I'll be using examples here from FreeCodeCamp's challenges. Let's say you have a dog and a bird, in programming these two will be regarded as objects. You could create a prototype for these two objects and name it Animal. Inside this prototype Animal you just created, you'll store all the properties the Dog and the Bird have in common. You can also make these two objects prototypes and create other objects under them with similar and different properties. Let's say you want to use Dog as a prototype, you can create other dogs with their separate properties like name and hair color, but they still have similar properties saved in the Dog object which is their parent prototype. The same can be done with the Bird too. These are called Instances.
Instances in common terms refer to occurrences of a certain object or material. In programming, you could say an instance is a modified duplicate of a prototype. So going back to our examples of the Bird and the Dog, we can create an instance of a Dog two instances of a Dog and give them the names Jack and Bush respectively. We can also give them hair colors of Brown and Black. The name and hair color are properties that are only available to the individual dogs, meanwhile, they still inherit other properties like 4 legs and bark from their parent prototype which is Dog. So you can see how even though we give them their different properties, they can still access the properties of the Dog prototype. This is why they're called instances because they're two different occurrences or as in this case two different dogs. The same can be done for the Bird and both the Dog and the Bird would inherit from the Animal prototype which is where their similar properties reside.