Переопределение функции jQuery теряет область видимости this - PullRequest
0 голосов
/ 02 апреля 2019

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

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

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

enter image description here

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

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

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

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

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

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

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

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

Спасибо

1 Ответ

1 голос
/ 03 апреля 2019

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

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

Подробнее о Javascript Scope, проверьте следующие ссылки: link1 и link2

...