После медитации пришел к такому умозаключению.
Конструктор оперирует вновь созданным объектом, который доступен по ссылке this.
Выражение
this.base = Obj(name,age)
возвращает undefined так как без new это обычная функция.
Если сделать так:
this.base = new Obj(name, age);
В
this.base
будет объект класса Obj
А теперь самое интересное:
Вызов
Obj.call(this, name, age)
подсовывает конструктору Obj не новый объект а тот которым оперирует Obj2. Т.е. эти два конструктора оперируют одним объектом.
И наконец-то моя ошибка:
this.base = Obj.call(this, name, age)
this.base === undefined так как конструктор не возвращает объект а инициализирует его.