Class[instance]
ищет instance
по всей цепочке прототипов (наследования).Таким образом, в случае Child2
оно начинается с Child2
, а если свойства отсутствуют, оно продолжается с Parent
, а затем Object
.В результате вы возвращаете экземпляр Parent
, когда хотите создать экземпляр Child2
.
Вместо проверки существования свойства с помощью поиска, вы должны использовать hasOwnProperty()
:
if (!Class.hasOwnProperty(instance)) Class[instance] = this;
Это означает, что если у самого Child2
(!) Нет экземпляра, назначьте его ему.