Жизненный цикл расширенного прототипа JavaScript
-
03-07-2019 - |
Вопрос
Если я хочу добавить метод isEmpty ко всем массивам JavaScript, я бы использовал следующий код
Array.prototype.isEmpty = function() {
return this.length == 0;
}
Предположим, что этот код находится в файле foo.js .Если я хочу, чтобы isEmpty был доступен на всех страницах веб-сайта, нужно ли мне включать foo.js во все HTML-файлы?Другими словами, "сбрасываются" ли прототипы всякий раз, когда пользователь переходит на другую страницу?
Спасибо, Дон
Решение
Да, вам нужно будет включать свой код при каждой загрузке страницы.
Думайте о каждой загрузке страницы как о цикле компиляции / компоновки.Все различные фрагменты Javascript на странице связаны друг с другом1 а затем выполняется как одна гигантская программа.При следующей загрузке страницы объекты Javascript по умолчанию запускаются в новом состоянии.
1.Связанные вместе безмозглым способом "каждый фрагмент кода использует одно и то же глобальное пространство имен"
Другие советы
Да, вам придется изменять прототип после загрузки каждой страницы
да, http не имеет состояния, поэтому каждая страница загружается отдельно.
однако добавление в Array.prototype - не очень хорошая идея.это означает, что если вы попытаетесь обойти это, то можете нарваться на неприятности.