The reason you are receiving `undefined` is because the prototype does not have a "name" property. It's important to note that although your call to "getStaticJohn()" may appear to be functioning perfectly, it actually alerts "John" with a capital "J" because it is accessing the "name" property of the function object "John".
When you invoke a method using an expression like `something.functionName`, the value of `this` within the function will always refer to the value of `something`. So, when you make the call:
John.prototype.getJohn();
The value of `this` inside the "getJohn()" function will be `John.prototype`, and not any instance created by the "John()" constructor.
If you include the following code:
John.prototype.name = "John's prototype";
then calling John.prototype.getJohn()
will no longer result in returning `undefined`.