новые методы массивов JS

Я хочу добавить свои методы в массив JS. Для этого, я обращаюсь к prototype объекта Array. Вот так:

Array.prototype.checkElement = function(e, index) {
    for (let i = 0; i < this.length; i++) {
        if (this[i] === e) {
            return index ? i : true;
        }
    }
    return false;
};

Все работает, но появляется проблема: этот метод видит цикл for… in, и, соответственно, это приводит к разного рода ошибкам, так как метод попадает в качестве ключа объекта при перечислении. Я попробовал скрыть его с помощью Object.defineProperty, вот так:

(function () {
    let newMethods = ["checkElement"];
    newMethods.forEach(method => {
        Object.defineProperty(Array.prototype, method, {
            enumerable: true,
        });
    });
})();

Но по какой-то причине, for… in все равно его видит. Как мне это исправить?


Ответы (1 шт):

Автор решения: smoking_elk

А, все, я разобрался, оказывается, нужно наоборот писать false в Object.defineProperty, тогда все работает корректно. Зато теперь можно делать кастомные методы массивам.

→ Ссылка