Help understanding map.call

Please consider the following code:

the code
function rot13(str) {
  // Split str into a character array
  return (
    str
      .split("")
      // Iterate over each character in the array
      .map.call(str, function(char) {
        // Convert char to a character code
        var x = char.charCodeAt(0);
        // Checks if character lies between A-Z
        if (x < 65 || x > 90) {
          return String.fromCharCode(x); // Return un-converted character
        }
        //N = ASCII 78, if the character code is less than 78, shift forward 13 places
        else if (x < 78) {
          return String.fromCharCode(x + 13);
        }
        // Otherwise shift the character 13 places backward
        return String.fromCharCode(x - 13);
      })
      .join("")
  ); // Rejoin the array into a string
}

Why .map.call(str, function(char) was used instead of only .map(function(char), by adding Function.prototype.call() you are changing the this of map to be str, and why .map worked even though it works only on arrays but str is not ?

I have edited your code to include the link for the certification project.

I want to understand only that part of the code, why to add to link to the certification project?

You always want to provide all the information and context as possible.

You never know if people want to play around with the code in the FCC code editor before answering.