How does prototypal inheritance work?
Prototypal inheritance means that an object inherits behaviour from another object by holding a reference to it as its prototype. When a property is read and the object does not have it, the runtime looks along the chain of prototypes until it finds it. Nothing is copied, so the relationship stays live.
The chain is built with the create method, which takes a prototype object and returns a new object whose internal prototype points at it. Setting the prototype property directly does the same thing, although the create method is preferred because it does not trigger the setters that a plain assignment can trigger.
The useful mental model is delegation rather than copying. The child object does not contain the parent's data. It contains a link, and every read that misses goes through that link. That is why the parent and the child stay in sync, and it is also why a large hierarchy of deep prototypes makes lookups slower than a flat structure.
Two consequences to be ready for. A method on the prototype is shared by every object that inherits from it, so this is where you put behaviour that is common to a group. And because the prototype is just an object, you can add to it after the fact, which is how a lot of older libraries used to add methods to the built-in prototypes, something that modern style guides advise against because it makes the behaviour of unrelated code unpredictable.