• Как воспользоваться функцией closest()?

    @Sun_Day
    Использовал полифилл.
    Этот
    if (!Element.prototype.matches) {
      Element.prototype.matches =
        Element.prototype.msMatchesSelector ||
        Element.prototype.webkitMatchesSelector;
    }
    
    if (!Element.prototype.closest) {
      Element.prototype.closest = function(s) {
        var el = this;
    
        do {
          if (Element.prototype.matches.call(el, s)) return el;
          el = el.parentElement || el.parentNode;
        } while (el !== null && el.nodeType === 1);
        return null;
      };
    }


    Или

    (function(ELEMENT) {
        ELEMENT.matches = ELEMENT.matches || ELEMENT.mozMatchesSelector || ELEMENT.msMatchesSelector || ELEMENT.oMatchesSelector || ELEMENT.webkitMatchesSelector;
        ELEMENT.closest = ELEMENT.closest || function closest(selector) {
            if (!this) return null;
            if (this.matches(selector)) return this;
            if (!this.parentElement) {return null}
            else return this.parentElement.closest(selector)
          };
    }(Element.prototype));


    https://developer.mozilla.org/en-US/docs/Web/API/E...
    https://developer.mozilla.org/ru/docs/Web/API/Elem...
    Ответ написан
    Комментировать
  • Как Добавлять/изменять методы прототипа?

    @Sun_Day
    Дело вкуса. Не могу сказать, что это очень плохой подход, но и используют его нечасто.

    Проблемы, которые могут возникнуть - это конфликт имен с другими либами, которые используют такой подход.
    Это пожалуй самая существенная проблема. Касается встроенных, стандартных объектов js'a, типа string, array и т.п.

    С другой стороны, это может быть очень удобно в некоторых кейсах. Вызывать вашу кастомную функцию на строке или массиве. Допустим, для своих нужд вы сделали более производительный метод, или очень полезный лично в вашем проекте, который отсутствует в стандартах.

    В общем, у стандартных объектов прототип я бы наверное трогать не стал, а у кастомных- почему бы и нет. Только в таком случае весь код нужно писать в прототипном стиле, без синтаксического сахарка.
    Ответ написан
    4 комментария