Переопределение функции jQuery теряет область действия «эта»

Я пытаюсь реализовать следующий ответ из другого вопроса:

https://stackoverflow.com/a/26469105/2402594

В основном мне нужно добавить дополнительную проверку в функцию jQuery. Следующий код находится в библиотеке jQuery:

введите здесь описание изображения

Но я не могу модифицировать оригинальный jQuery, поэтому создаю патч в отдельном файле. Что я делаю, так это переопределяю функцию поиска и добавляю функциональность следующим образом:

(function() {
var originalFind = jQuery.fn.find;

jQuery.fn.find = function () {
    try {
        document === document;
    }
    catch (err) {
        document = window.document;
    }

    return originalFind.apply(this, arguments); 
};
})();

Однако функция переопределяется правильно, когда код вызывает «найти», моя «попытка» не выдает никаких исключений, когда должна, потому что область действия отличается от той, что находится внутри функции Sizzle, поэтому исходная проблема все еще существует.

Я также попытался продублировать весь код Sizzle, добавив свою модификацию и назначив ее jQuery.fn.find, как это было сделано выше, однако проблема с областью действия все еще существует, и случаются некоторые сбои.

Мне нужно, чтобы «документ» был установлен до того, как он дойдет до следующей проверки, или он выйдет из строя из-за отказа в разрешении: введите здесь описание изображения

Как я могу поделиться областью, чтобы попытка/поймать могла быть выполнена правильно? Это вообще возможно? Любые другие идеи?

Спасибо


person Victor    schedule 02.04.2019    source источник


Ответы (1)


Как мы все знаем, в JavaScript есть область видимости функции: каждая функция создает новую область видимости. Область видимости определяет доступность (видимость) этих переменных. Переменные, определенные внутри функции, недоступны (видимы) снаружи функции.

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

Дополнительные сведения о Javascript Scope см. по этим ссылкам: link1 и link2

person Zhi Lv    schedule 03.04.2019
comment
Большое спасибо за ответ. Изменение исходной библиотеки jQuery не вариант, так что здесь практически нечего делать? - person Victor; 03.04.2019