У меня есть два внешних lib-файла JavaScript, которые я должен загрузить на одну JSP страницу. У них обоих есть функция с именем autoSave (), оба без параметров. Я не могу изменить их подпись, поскольку они не являются моими файлами сценариев.

Как я могу явно вызвать функцию в сценарии A или B? Как определяется приоритет?

6
Ravish Bhagdev 4 Июн 2010 в 19:58

3 ответа

Лучший ответ

Функция, определенная вторым сценарием, перезапишет функцию, определенную первым.

Вы можете сохранить копию функции из сценария A, прежде чем включать сценарий B.

Например:

<script type="text/javascript" src="Script A"></script>
<script type="text/javascript">
    var autoSave_A = autoSave;
</script>

<script type="text/javascript" src="Script B"></script>
<script type="text/javascript">
    var autoSave_B = autoSave;
</script>

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

14
SLaks 4 Июн 2010 в 16:05

Хорошо, IMO, ваши библиотеки должны быть namespaced , чтобы вы могли легко вызывать lib1.autoSave() или lib2.autoSave(arg).

Цель состоит в том, чтобы как можно использовать несколько глобальных переменных.

Посмотрите на следующие статьи:

1
Community 23 Май 2017 в 10:30

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

0
Darin Dimitrov 4 Июн 2010 в 16:01