1. La relación es básicamente herencia, la implementación es por prototipos.
Al igual que en C++, existe una relación Persona -> Mamífero, solo que los mecanismos son distintos.
Acá un *antiguo* artículo que habla un poco sobre distintos mecanismos de herencia:
http://www.crockford.com/javascript/inheritance.html 2. Lo que hiciste es crear una property privada (Edad) y un método 'privileged' (tiene visibilidad sobre las properties declaradas en el closure generado por el constructor).
Ese tipo de mecanismos permiten implementar scopes privados, pero tienen el costo de que cada función que definis dentro del constructor se replica en cada instancia. Si las agregas al prototype, pierden la capacidad de trabajar sobre elementos privados, pero son más eficientes (se crean una unica vez, en el prototipo).
3. Las restricciones de scoping tienen como objetivo hacer cumplir el encapsulamiento. De nuevo, JS es un lenguaje en el que por limitaciones propias siempre se estiló utilizar convenciones sobre restricciones reales.
Acá te dejo una cita del 'Programming in Lua' (hermoso libro por cierto), que es un lenguaje bastante similar a JavaScript
:
'If you do not want to access something inside an object, just do not do it. '
Fuente:
http://www.lua.org/pil/16.4.html
De cualquier manera, se puede jugar e implementar mecanismos de scoping (divertido y didactico, sin demasiado uso en el mundo real).
4. La implementación actual de constructores y herencia en JavaScript es horrible y engorrosa. Esto es simplemente por diseño.
La próxima versión (EcmaScript6) introduce 'clases' más amigables para la gente que viene de lenguajes como C++ o Java.
Link (spec):
http://wiki.ecmascript.org/doku.php?...inimal_classes
-------
Tópicos de esto no hay, porque la gente no suele utilizar JavaScript más que para validar un formulario o hacer algo de minima complejidad en jQuery.
Saludos.