Почему нельзя вешать на Array.prototype дополнительный обработчик или функцию

Ответ

Добавление методов в Array.prototype может привести к неожиданным побочным эффектам:

  1. Конфликты имен: если в будущем в стандарт добавится метод с таким же именем, поведение сломается.
  2. Итерации: добавленные свойства будут видны в for..in (хотя для массивов for..in не рекомендуется).
  3. Совместимость: код может сломаться в других библиотеках или фреймворках.

Лучше использовать отдельные утилиты или классы-обертки.

Пример проблемы:

Array.prototype.sum = function() { 
  return this.reduce((a, b) => a + b, 0); 
};

const arr = [1, 2, 3];
for (const key in arr) { 
  console.log(key); // Выведет: 0, 1, 2, "sum" 
}

Решение:

function sum(array) {
  return array.reduce((a, b) => a + b, 0);
}