Можно ли добавить функцию-член в класс Array в JavaScript без появления в цикле for-in?

В каком-то коде, над которым я работаю, я создал функцию JavaScript, которая применяется исключительно к массивам, и я подумал, что попробую добавить ее как функцию-член.

Я добавил это так:

Array.prototype.myfunc = function(a){
    ...
}

Который отлично работает по большей части. Проблема, с которой я сталкиваюсь, связана с циклом for-in. Он включает эту функцию в цикл. Если я затем наберу этот фрагмент:

var bar, foo = ['alpha', 'bravo', 'charlie'];
for(bar in foo) console.log(foo[bar]);

Затем вывод идет по строкам:

alpha
bravo
charlie
function myFunc(a){
    ...
}

Итак, есть ли способ сделать это, но избежать его отображения в цикле for-in?


person Jacob Ewing    schedule 04.03.2020    source источник
comment
Вы можете использовать Object.defineProperty, но, как всегда, изменение прототипа глобальных объектов крайне не рекомендуется.   -  person VLAZ    schedule 04.03.2020
comment
Использование for..in для получения содержимого массива также не рекомендуется. Вместо этого используйте for..of. См. Почему использование for…in с итерацией массива — плохая идея?   -  person Heretic Monkey    schedule 04.03.2020
comment
См. также: stackoverflow.com/questions/7141734 /   -  person Mitya    schedule 04.03.2020


Ответы (1)


Вы можете использовать Object.defineProperty. для создания неперечислимых атрибутов любого объекта, включая массивы. Помните, что в JavaScript массивы — это просто объекты с числами вместо ключей, поэтому атрибуты, которые вы добавляете к ним, появляются в forEach.

person superluminary    schedule 04.03.2020
comment
поэтому атрибуты, которые вы добавляете к ним, появляются в forEach - это просто неправильно... - person Andreas; 04.03.2020
comment
Я думаю, вы имели в виду ... в for ... in, а не .forEach() - person Pointy; 04.03.2020