为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕田峪7331174 2021-04-13 17:14:44
我正在尝试从另一个问题中实现以下答案:https://stackoverflow.com/a/26469105/2402594基本上,我需要向jQuery函数添加额外的检查。以下代码在jQuery库中:但是我无法修改原始的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,但是范围问题仍然存在,并且会发生崩溃。我需要先设置“文档”,然后才能进行以下检查,否则由于权限被拒绝而崩溃:我如何共享范围,以便可以正确完成try / catch?可能吗?还有其他想法吗?
查看完整描述

1 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

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

因此,如果文档是在JQuery库函数中定义的,我认为您将无法访问它。您可以尝试定义一个全局变量来存储文档,然后可以在JQuery库函数和重写函数中对其进行访问。


查看完整回答
反对 回复 2021-04-15
  • 1 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号