The 'initial password' value is stored in Person.prototype.password. Person.prototype is an object with all the common attributes shared between Person instances. When you access aPersonInstance.password, the password property is first looked up in the aPersonInstance object; if it's not found there it will be looked up in its prototype, and then in its prototype's prototype and so on.
console.log f will not show f's prototype properties, only the properties stored in f themselves (also known as f's own properties). When you assign Bob's password with b.password = 'bob\'s password' you're creating a new password property in b itself, which will now be the value of accessing b.password, even though b's prototype still has the 'initial password' value. I hope that made some sense =P
By storing 'initial password' in the prototype you're sharing that value between all Person instances as a kind of default value. This is perfectly fine to do with strings or other primitive (immutable) types; but you have to take special care if you're going to do it with arrays or other mutable objects, because the same object will be shared between all the class' instances, and if one of them modifies it, e.g. @someArray.push 5, all the other ones are going to see it. In those cases, it's usually preferable to initialize the attribute in the class constructor, like @someArray = [], to guarantee that each instance will have a different array/object attribute.
coffee test.coffeeyou don't need to do the crazy.-p) and then sometimes I stuck| nodein front of everything to run the code. Thank you for the tip anyways. ;)