code: function cloneAndInvoke(obj){
    var clone = Array.isArray(obj) ? [] : {};
    for (var key in obj) {
      if (obj[key] !== null && typeof(obj[key])=="object") {
        clone[key] = cloneAndInvoke(obj[key]);
      }else if(typeof(obj[key])=="function"){
        clone[key] = obj[key]();
      }else{
        clone[key] = obj[key];
      }
    }
    return clone
  }
docs: /*
  Make deep copy of passed object.
  If function was assigned to a key, invoke the function.
  Arg:
  - obj (Array or Object)
  Return: clone (Array or Object)