Whether using Object.create() to copy an object or to instantiate new objects using prototypal style, the most important thing to know is that your newly created objects will share-but not contain-the properties and methods of the object from which they were created.
After I create the object named olga from my helga object, when I want to look up a property or method that I have copied over from the original, the compiler does not return undefined when it fails to find the property or method on the object where I am looking. Instead, it looks to the parent object.
Of course, you can always overwrite existing properties on your new objects, and if you are creating many instances of a class using a constructor function, you will likely want to change some basic property values to differentiate among your objects.
Let's take a look at how this plays out in code. This snippet is expanded from my first example.
I create my new olga object from helga on line 8. I log the value of olga on line 9, and only see an empty object. However, I know that if I call olga.ability(), since helga has an ability method, olga will also be able to hide your socks from you when you're not looking. I can add new methods and properties to olga without affecting helga. I can overwrite olga's inheirited properties and methods without affecting helga. However, on line 18, I overwrite one of helga's properties, and on line 19, we can see that olga is also affected by this change.