Хотя теоретически вы могли бы написать инструмент статического анализа, который бы обнаруживал использование глобальных переменных, определенных в других файлах, таких как MyObject
, вы не могли реально отследить использование методов расширения prototype
.
JavaScript - это язык с динамической типизацией, поэтому для любого инструмента нет практического способа узнать, что a
, если он передан из функции g
, является Array
, и поэтому, если вызывается f()
, естьзависимость.Определяется только то, какие переменные содержат типы во время выполнения, поэтому чтобы выяснить, нужен ли вам интерпретатор, и вы поставили перед собой задачу полной Тьюринга.
Не говоря уже о других динамических аспектахJavaScript, который полностью игнорирует статический анализ, такой как выборка свойств с помощью записи в квадратных скобках, страшных eval
или строк в тайм-аутах или атрибутах обработчика событий.
Я думаю, что это действительно не стартер.Вероятно, вам лучше отслеживать зависимости вручную, но упростить его, сгруппировав связанные функции в модули, которые станут вашей основной единицей отслеживания зависимостей.Хорошо, вы добавите еще несколько функций, которые вам технически необходимы, но, надеюсь, не слишком много.
Хорошей идеей также является пространство имен каждого модуля, поэтому очень ясно, куда направляется каждый вызов, делая еголегко контролировать зависимости вручную (например, с помощью комментария // uses: ThisModule, ThatModule
вверху).
Поскольку расширения встроенных прототипов сложнее отслеживать, сводите их к минимуму,Расширение например.Array
Включение методов ECMAScript Fifth Edition (например, indexOf
) в браузеры, у которых их еще нет, является хорошей вещью в качестве базового исправления, которое будут использовать все сценарии.Добавление совершенно новой произвольной функциональности к существующим прототипам сомнительно.