Создание поддерживаемого кода JavaScript важно, если вы хотите продолжать использовать код.

В этой статье мы рассмотрим основы создания поддерживаемого кода JavaScript и рассмотрим, как обрабатывать объекты, которыми мы не владеем.

Объекты, которыми мы владеем

Объекты, которыми мы владеем, — это те, которые мы создаем.

Код, создающий объект, может быть написан не нами, но объект создается нами.

Это означает, что объекты, которыми мы не владеем, такие как нативные объекты, такие как Object , Date и т. д.

Мы также не владеем объектами DOM, встроенными глобальными объектами или библиотечными объектами.

Все это является частью среды проекта.

Их следует рассматривать как доступные только для чтения.

Мы не должны переопределять методы этих объектов.

И мы не должны добавлять или удалять существующие методы из этих объектов.

Это потому, что нам легко делать то, чего никто другой не ожидает.

Это приводит к путанице и трате времени на отслеживание неожиданного кода.

Не переопределяйте методы

Переопределение методов объектов, которыми мы не владеем, — одна из худших практик в JavaScript.

В сценариях очень легко переопределить существующие методы.

Например, мы можем написать:

document.getElementById = () => {
  return null;
}

Тогда все будут смущены тем, почему document.getElementById всегда возвращает null .

В скрипте ничто не мешает нам перезаписать методы DOM.

Мы также можем перезаписать любое другое свойство в коде любой библиотеки.

Например, кто-то может написать такой код:

document._originalGetElementById = document.getElementById;
document.getElementById = (id) => {
  if (id === "window") {
    return window;
  } else {
    return document._originalGetElementById(id);
  }
};

Это также плохо, поскольку меняет способ работы стандартных библиотечных методов.

Это также вносит путаницу, как и все остальное.

Новый код вызывается с id is 'window' , но исходный код используется с чем-то еще.

Это так же плохо, поскольку getElementById иногда работает так, как мы ожидаем, а иногда работает.

Поэтому мы никогда не должны переопределять какие-либо методы, чтобы они всегда работали так, как от них ожидается.

Не добавляйте новые методы

Также довольно легко добавлять новые методы к существующим объектам в JavaScript.

Нам нужно только присвоить функцию существующему объекту, чтобы сделать его методом.

Это позволяет нам изменять все виды объектов.

Например, мы можем добавить методы к document :

document.foo = () => {
  console.log('hello');
};

Мы также можем добавить методы к Array prototytpe :

Array.prototype.foo = () => {
  console.log('hello');
};

Они оба плохие.

И ничто не мешает нам добавить к ним методы.

Как и в случае переопределения методов, мы заставляем библиотечный объект вести себя не так, как мы ожидаем.

Кроме того, метод, который мы добавили, может быть добавлен в стандартную библиотеку.

Затем у нас есть 2 метода, которые делают разные вещи, и мы перезаписали их нашей версией.

Даже незначительные различия могут вызвать много путаницы.

Вывод

Мы не должны добавлять или переопределять методы каких-либо встроенных или библиотечных объектов.

Это потому, что мы будем смущены тем, почему код работает не так, как мы ожидаем.