Как научится правильно писать гибкий объектно ориентированный код?
Обычно я делаю как-то так
function construct(l) {
 var obj = {
  a : 5,
  b : function() {
   
  },
  c : l
 }
 return obj;
}
Или даже так
function construct(l) {
 var obj = {}
 obj.a = 5;
 obj.b = function() {
 
 }
 obj.l = l;
 return obj;
}
Но хочется чего то более сложного.
Как создают объекты профессионалы?