覆盖jQuery函数会丢失'this'范围

问题描述 投票:0回答:1

我试图从另一个问题实现以下答案:

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

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

enter image description here

但我无法修改原始的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,如上所述,但是范围问题仍然存在并且发生了一些崩溃。

我需要在文件达到以下检查之前设置“文档”,否则由于权限被拒绝而崩溃:enter image description here

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

谢谢

javascript jquery internet-explorer permission-denied sizzle
1个回答
1
投票

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

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

有关Javascript Scope的更多详细信息,请查看以下链接:link1link2

© www.soinside.com 2019 - 2024. All rights reserved.