The following examples should explain the prototype chain, how it's assembled and how it's interacted with - I've added some console output to the loops so we can see what's happening as they're called.
The code below assumes that its running under an ECMAScript 5 environment, so thats the latest versions of Safari, Chrome and Firefox - as well as NodeJS. It takes advantage of Object.create and Object.getPrototypeOf, these are the standardised versions of messing around with the __proto__ property.
And to see it in action:
> node demo.js john instance_of Employee Trying to match Employee.prototype Comparing to Retired.prototype Comparing to Employee.prototype true john instance_of Array Trying to match Array.prototype Comparing to Retired.prototype Comparing to Employee.prototype Comparing to Person.prototype Comparing to Object.prototype false new_instance(Person, 'john') instanceof Person true new_instance(Employee, 'boss', 'john') instanceof Employee true get_attribute(john, 'role') Looking on object directly Boss get_attribute(john, 'greeting') Looking on object directly Looking on Retired.prototype Looking on Employee.prototype Welcome to work call_method(john, 'greet') Looking on object directly Looking on Retired.prototype Looking on Employee.prototype Looking on Person.prototype Hello John
If you'd like to have a play with these functions without firing up NodeJS, here's the obligatory JSFiddle: http://jsfiddle.net/88je8/1/