Почему глобальный объект jQuery перезаписывается после загрузки страницы? - PullRequest
0 голосов
/ 23 апреля 2011

Я пишу расширение jQuery, содержащееся в самоисполняющейся функции:

(function($) {
    // global variables for the purposes of this test
    __$ = $;
    __$support = $.support;

    $.support.abc = "123";

    // Setup for my extension goes here.

})(jQuery);

На моей тестовой странице у меня есть

<script type="text/javascript" src="jquery-1.5.2.js"></script>
<script type="text/javascript" src="myplugin.js"></script>
<script type="text/javascript">
    $(function() {
        console.log(__$ === $); // false
        console.log(__$support === $.support); // false
        console.log($.support.abc); // undefined
    });
</script>

Почему это происходит? У меня нет других скриптов или плагинов jQuery, которые могли бы перезаписать объект jQuery.

Я не смог найти, какой код в исходном коде jQuery перезаписывает объект jQuery после того, как документ готов. Есть идеи?

Если нет способа избежать этого, какова будет правильная процедура определения новых свойств объекта jQuery.support, к которым можно получить доступ после того, как документ будет готов?

РЕДАКТИРОВАТЬ: Я опустил критическую часть моего тестового кода, который непреднамеренно переоценил источник jQuery - и объясняет, почему эта проблема происходила. Смотрите мой ответ ниже.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2011

Ух ты, я чувствую себя глупо.

Мой тестовый код (часть, которую я не опубликовал в вопросе) специально вызывал jQuery.ajax() для jquery-1.5.2.js (так как это достаточно большой файл для тестирования событий прогресса). Однако я забыл, что, если не установить вручную параметр dataType, отличный от script, jQuery будет оценивать любой JavaScript, полученный с помощью jQuery.ajax().

.

Итак, jQuery оценивал новую копию своего исходного кода, и поэтому window.jQuery перезаписывался.

0 голосов
/ 23 апреля 2011

Что-то не так, потому что я получаю правильный вывод .

...