Array.prototype.forEach - полифил

334
08 марта 2017, 19:56

В одном из учебников была задача:

Написать полифил к методу массива forEach.

Мое решение выглядит следующим образом:

Array.prototype.myForEach = function(callback, thisArg) {
    if (Object.prototype.toString.call(callback) !== '[object Function]') {
          throw new TypeError(callback + ' is not a function');
    }
    thisArg = thisArg || null;
    var self = this;
    var len = this.length;
    for(var i = 0; i < len; i++) {
       callback.call(thisArg, self[i], i, self);
    }
 }  

Затем заглянул в MDN, объясните зачем в полифиле описанном там, следующие строки:

// 1. Положим O равным результату вызова ToObject passing the |this| value as the argument. var O = Object(this);

Затем для определения длинны используется побитовый сдвиг

// 2. Положим lenValue равным результату вызова внутреннего метода Get объекта O с аргументом "length".
// 3. Положим len равным ToUint32(lenValue).
var len = O.length >>> 0;

Ну а затем используется цикл while с вложенным в него for in
Из всего этого следует, что написанный мной код имеет недостатки, в чем они могут проявляться?

READ ALSO
Зачем нужны библиотеки типа React.js [требует правки]

Зачем нужны библиотеки типа React.js [требует правки]

Я так понял, что они нужны для динамического обновления данных в доме, но для этого нужен массив с данными, а получать их с помощью Ajax довольно...

266
Jquery: как переделать скрипт?

Jquery: как переделать скрипт?

Есть скрипт, который вызывается при клике по блоку и любым его дочерним элементам:

247
Как получить массив цветов

Как получить массив цветов

Привет, мне нужна функция, в которую мы передаем цвет и получаем массив, этого же цвета, но допустим каждый элемент массива чуть чуть светлее

291