覆盖 jQuery 函数失去 'this' 范围

Overriding jQuery function loses 'this' scope

我正在尝试实现另一个问题的以下答案:

基本上我需要向 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); 
};
})();

函数被正确覆盖,但是,当代码调用 'find' 时,我的 'try' 没有抛出任何异常,因为范围与 Sizzle 函数内部的范围不同,所以原来的问题仍然存在。

我也试过复制所有的 Sizzle 代码,添加我的修改并将其分配给 jQuery.fn.find 如上所述,但是范围问题仍然存在并且发生了一些崩溃。

我需要先设置 'document' 才能进行以下检查,否则会因权限被拒绝而崩溃:

我如何共享范围以便 try/catch 可以正确完成?有可能吗?还有其他想法吗?

谢谢

众所周知,JavaScript有函数作用域:每个函数创建一个新的作用域。范围决定了这些变量的可访问性(可见性)。在函数内部定义的变量不能从函数外部访问(可见)。

所以,如果文档定义在JQuery库函数中,我想你是访问不到的。您可以尝试定义一个全局变量来存储文档,然后,您可以在 JQuery 库函数和覆盖函数中访问它。

有关 Javascript 范围的更多详细信息,请查看以下链接:link1 and link2