Вызов метода подменой контекста

142
16 августа 2018, 08:50

Если я хочу вызвать функцию из прототипа массивов, например forEach, для коллекции, допустим NodeList, то какой вариант лучше избрать?

  1. [].forEach.call(collection, function (element) {});

  2. Array.prototype.forEach.call(collection, function(element) {});

Есть предположение что в первом случае отработает конструктор массива. Второй случай этим не страдает. Так ли это?

Answer 1

Согласно спецификации в первом случае будет происходить следующее:

  1. создание массива
  2. поиска в созданном массиве свойства forEach: fail
  3. получение прототипа созданного массива
  4. поиск свойства forEach в прототипе: OK
  5. вызов функции

Во втором случае:

  1. получение значения для Array
  2. поиск в полученном значении свойства prototype
  3. поиск свойства forEach
  4. вызов функции

Однако стоит отметить, что в зависимости от конкретной реализации и различных оптимизаций оба примера могут быть сведены к одному и тому же.

Если провести замеры, то некоторые бразузеры могут показать незначительное различие, а некоторые, например хром, показывают, что различие в размере погрешности.

Поэтому на вопрос: какой способ лучше выбрать? можно дать ответ: из приведенных - любой.

Кроме того, для итерации по NodeList можно воспользоваться недавно добавленным методом forEach напрямую.

READ ALSO
Доступность инпута типа чекбокс

Доступность инпута типа чекбокс

На форме есть несколько инпутов типа чекбоксПеремещаться ТАБом по элементам формы я могу

160
Как исключить компонент из сборки в коде в зависимости от условия?

Как исключить компонент из сборки в коде в зависимости от условия?

Как исключить компонент из сборки в коде в зависимости от условия (компонент должен быть только если NODE_ENV = development), без правок конфига вебпака?

148
Сортировка треугольников

Сортировка треугольников

Есть рабочий код который отсчитывает площадь по формуле Герона с треугольника, используя пустые массивы, которые я заполняю в консоли методомpush();

209
Поочередное нажатие button

Поочередное нажатие button

Ребята как можно сделать чтоб при нажатии на кнопку она залилась зеленым цветом , при нажатии на вторую кнопку первая окрашивается в серый...

138