Every JavaScript object has an internal property called [[Prototype]]. If
you look up a property via obj.propName or obj['propName'] and the object
does not have such a property - which can be checked via obj.hasOwnProperty(
'propName') - the runtime looks up the property in the object referenced by
[[Prototype]] instead. If the prototype-object also doesn't have such a
property, its prototype is checked in turn, thus walking the original object
's prototype-chain until a match is found or its end is reached.