Instead, I think of constructors as being like “cookie cutters” for objects. When a function is used with the new operator, it’s called in a special way: instead of executing the function normally and returning a result, a new blank object is created. Then, when the function is called, its this operator points to that new blank object. Additionally, the constructor property of the blank object is set to point to the constructor function itself.
Every function has a prototype property and it contains an object.
only function naturelly have a prototype property, by default it is an object.
The difference between own properties and properties of the prototype
__proto__, the secret link every object keeps to its prototype
Methods such as isPrototypeOf(), hasOwnProperty(), and propertyIsEnumerable()
How to enhance built-in objects, such as arrays or strings