Just incase you don't know too much about OOP......... this still isn't going to be easy in under 500 words but I'll give it a go!
Objects have properties, such as color, width, height etc. They also have MethODs [stuff they DO] such as play(),stop(),goto.... etc. They inherit these from the template they were made from (their Class).
For example all movieclips have the same properties (_x, _y, _alpha, _rotation.......) and the same methods (play(), stop()......) because they inherited them from the 'movieClip Class'.
If you make your own object then you have to create the Class (template) for it. When you create a Class, Flash automatically assigns that class a property of its own called prototype.
Prototype holds a generic object, onto which you can attach any methods or properties that you want all instances of that object to share.
Confused by that last bit? Well read on, it might clarify things.......
You can also give existing objects new methods, so in more simple terms if you wanted to give every movieclip a new method called boogie (which would be accessed like this: movieClipName.boogie() ), you would add your method on to the prototype of the 'movieclip Class' so it can be shared by all instances
__proto__ is a reference to the prototype property.
I'm not so clear on this but I believe that if you have an instance of a movieclip called "Fred" then fred.__proto__ will equal: movieClip.prototype
This allows the instance to check what inherited properties it should have.
Hope this helps