code: function(fn, scope) {
        var length = this.length, index = 0, result = new Array(length);
        checkFirstArgumentExists(arguments);
        while(index < length) {
          if(index in this) {
            result[index] = fn.call(scope, this[index], index, this);
          }
          index++;
        }
        return result;
      }
docs: *
  @method map(<map>, [scope])
  @returns Array
  @short Maps the array to another array containing the values that are the result of calling <map> on each element.
  @extra [scope] is the %this% object. In addition to providing this method for browsers that don't support it natively, this enhanced method also directly accepts a string, which is a shortcut for a function that gets that property (or invokes a function) on each element.
  @example
  
  +   [1,2,3].map(function(n) {
  return n * 3;
  });                                  -> [3,6,9]
  ['one','two','three'].map(function(n) {
  return n.length;
  });                                  -> [3,3,5]
  ['one','two','three'].map('length')  -> [3,3,5]
  *