code: function (func, thisArg, argCount) {
          var type = typeof func;
          if (type !== 'function') {
              if (type !== 'object') {
                  return function (object) {
                      return object[func];
                  };
              }
              var props = keys(func);
              return function (object) {
                  var length = props.length,
                      result = false;
                  while (length--) {
                      if (!(result = isEqual(object[props[length]], func[props[length]], sofa.Util.indicatorObject))) {
                          break;
                      }
                  }
                  return result;
              };
          }
          if (typeof thisArg == 'undefined') {
              return func;
          }
          if (argCount === 1) {
              return function (value) {
                  return func.call(thisArg, value);
              };
          }
          if (argCount === 2) {
              return function (a, b) {
                  return func.call(thisArg, a, b);
              };
          }
          if (argCount === 4) {
              return function (accumulator, value, index, collection) {
                  return func.call(thisArg, accumulator, value, index, collection);
              };
          }
          return function (value, index, collection) {
              return func.call(thisArg, value, index, collection);
          };
      }
docs: /*jshint eqeqeq:true this method is ripped out from lo-dash /*jshint eqeqeq:false