It has been awhile I write spagetti code using javascript. I tried to organize my code but I'm confused which one to use and when to use certain pattern.
constructor pattern
function foods(food){
  this.food = food;
  this.eat = function(){
    return 'I"m eating ' + this.food;
  }
}
var eatApple = new foods("apple");
console.log(eatApple.eat()); 
var eatBanana = new foods("banana");
console.log(eatBanana.eat()); 
object literal
var foods = {
  food : null,
  eat : function(){
    return 'I"m eating ' + this.food;
  }
};
foods.food = 'apple';
console.log(foods.eat());
foods.food = 'banana';
console.log(foods.eat());
revealing module
var foods = function(){
  var defaultFood = "default food";
  function eat(food){
    //this is ugly
    if(food){
      food = food;
    }else{
      food = defaultFood;
    }
    return 'I\"m eating ' + food;
  }
  return {
    eat: eat
  };
}();
var justEating = foods.eat();
var eatingApple = foods.eat('apple');
var eatingBanana = foods.eat('banana');
console.log(justEating);
console.log(eatingApple);
console.log(eatingBanana);
I think object literal is the most common use, why isn't everybody just use that? And is revealing module still relevant in 2016? most people will just do module.exports.
 
    