| Сообщение от Pavel_Volodko | 
	| А вот имея функцию-конструктор для создания объекта-прототипа всё делается элементарно. | 
	
Не намного элементарнее. Вы объединили несколько задач в одну. Цепочка наследования (делегирования) выстраивается с помошью объекта-прототипа, созданного "промежуточным" конструктором в стиле (паттерн by Lasse Reichstein Nielsen):
function inheritObject(object) { 
  function Dummy(){}; 
  Dummy.prototype = object; 
  return new Dummy(); 
}
Одновременно вместо Dummy для "подклассов" используется заранее подготовленная и заложенная в функцию структура. То есть, получив правильно прилинкованный объект-прототип, вы вместо:
Person.prototype.x =//...
Person.prototype.y =//...
используете:
this.x = //...
this.y = //...
что, в принципе, почти то же самое кроме доступа к локальным переменным функции из методов. Отсюда 2 вывода - то ли вам важны локальные переменные ($className), то ли вам не нравится "обвешивать" объект-прототип руками или через for-in...