Zaczynamy pisać polyfill dla funkcji map. Nie będzie to jeszcze ostateczna wersja, ale całkowity odpowiednik tego, co mamy w JavaScript.

Iteracja pierwsza – element:

Array.prototype.myMap = function(callbackFn) {
    var arr = [];              
    for (var i = 0; i < this.length; i++) { 
      arr.push(callbackFn(this[i]));
    }
    return arr;
}

Iteracja druga – element i indeks:

Array.prototype.myMap = function(callbackFn) {
    var arr = [];              
    for (var i = 0; i < this.length; i++) { 
      arr.push(callbackFn(this[i], i));
    }
    return arr;
}

Iteracja trzecia – element, indeks, tablica:

Array.prototype.myMap = function(callbackFn) {
    var arr = [];              
    for (var i = 0; i < this.length; i++) { 
      arr.push(callbackFn(this[i], i, this));
    }
    return arr;
}

Iteracja czwarta, obsługa thisArg:

Array.prototype.myMap = function(callbackFn, thisArg) {

    var context = thisArg || globalThis;

    var arr = [];              
    for (var i = 0; i < this.length; i++) { 
      arr.push(callbackFn.call(context, this[i], i, this));
    }
    return arr;
  }

  let arr = [1,2,3];

  let arr2 = arr.map(function(el){
    return el + this.num;
  }, {num: 10});

  console.log(arr2.toString());
  //11,12,13