When dynamic properties meet the prototype chain it’s a festival...it's super easy to add a property in runtime to any exisitng instance of a specific 'Type' and to all its future instances via the prototpye mechanism:

Pay attention that the defaults are only apply when one define a property via the the defineProperty() methods, moreover the defaults when defining a new property in the traditional way are quite the opposite..

so if we change the last example abit we get an additional car, take a look:

Another interesting issue is re-defining, one can re-define properties and even built-in properties, this is a very powerful tool..for example setting all the built-ins as unconfigurable can be a very strong statement. an exception to that is the ‘Array.length’ property which can cause different behavior across different browsers..

It’s important to note that defineProperty() has been announced in ECMAScript 5, hence only modern browser versions support it to the full extent.