Apparently in this framework: 1. Each constructor must "keep the game" by var self = prv.self = prv.self || {}; 6. Namespace collision with the name prv.self 2. Protected properties assigned via: prv.life_left = birth.LIFE_SPAN_LIMIT; 3. Private members are just local to constructor function and hidden from ~descendants. 4. Supplying named prv object at Class instantiation ~defeats the purpose of protected namespace. 5. Diamond inheritance is non-commutative.