В одном из учебников была задача:
Написать полифил к методу массива 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
Из всего этого следует, что написанный мной код имеет недостатки, в чем они могут проявляться?
Сборка персонального компьютера от Artline: умный выбор для современных пользователей