Прототипы JavaScript [Решено, все так печально]
Создавайте разные прототипы или объявляйте ownProperty attr в конструкторе иначе никак. Логично, что foo.attr === bar.attr потому как оба они ссылаются на Class.prototype.attr
foo.attr === bar.attr потому что foo.attr это foo.__proto__.attr, а foo.__proto__ === bar.__proto__. Когда вы делаете присваивание foo.attr = {}, foo.attr перестает быть foo.__proto__.attr.