как настроить несколько функций в прототипе объекта - PullRequest
1 голос
/ 15 апреля 2019

Как настроить объект, имеющий несколько функций, второй пример кода - это то, что я пытаюсь сделать

Object.defineProperty(NodeList.prototype, 'each', {
    value: function (fn) {
        return Array.from(this).forEach((node, index) => fn(node, index))
    }
});

// ниже не работает

HTMLElement.prototype = {
   hasClass: function(selector) {
   },
   next: function(selector) {
   }
}

1 Ответ

2 голосов
/ 15 апреля 2019

Используйте Object.assign вместо:

Object.assign(HTMLElement.prototype, {
  hasClass(selector) {
    return this.classList.contains(selector);
  },
  next(selector) {
    const { nextElementSibling } = this;
    return nextElementSibling && nextElementSibling.matches(selector)
    ? nextElementSibling
    : null;
  }
});

const div = document.querySelector('div');
console.log(div.hasClass('foo'));
console.log(div.next('div'));
<div class="foo"></div>

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

Вы также можете использовать Object.defineProperties для одновременного определения нескольких свойств, но требуемый код является более длинным.

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