重写jQuery函数失去了'this'范围

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

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

基本上,我需要向jQuery函数添加额外的检查。以下代码在jQuery库中:

http://img2.mukewang.com/6078020200016a0b05140340.jpg

但是我无法修改原始的jQuery,因此我在一个单独的文件中创建了一个补丁。我正在做的是覆盖find函数并添加功能,如下所示:


(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,但是范围问题仍然存在,并且会发生崩溃。


我需要先设置“文档”,然后才能进行以下检查,否则由于权限被拒绝而崩溃:

http://img.mukewang.com/607802120001c69b06720079.jpg

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



慕田峪7331174
浏览 152回答 1
1回答

呼唤远方

众所周知,JavaScript具有函数作用域:每个函数都创建一个新作用域。范围确定这些变量的可访问性(可见性)。从函数外部无法访问(可见)在函数内部定义的变量。因此,如果文档是在JQuery库函数中定义的,我认为您将无法访问它。您可以尝试定义一个全局变量来存储文档,然后可以在JQuery库函数和重写函数中对其进行访问。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript