我发现了一种扩展核心 jQuery init 函数的方法(每当您使用 $() 或 jQuery() 函数时都会调用该函数)。使用普通代理模式不可能做到这一点,但以下代码可以使其工作:
var origInit = jQuery.fn.init;
jQuery.fn.init = function(selector, context, rootjQuery) {
if (some condition) {
//custom code here, possibly returning some other jQuery object than
//what jQuery would normally return
}
return origInit.call(jQuery.fn, selector, context, rootjQuery);
}
我的问题是这可能有用,因为我意识到使用它来缓存选择器的最初意图是有问题的(因为它会影响其他插件的行为 - 我最终使用单独的函数进行缓存)。
所以我想我应该分享这个方法,并且我也很想听到关于它的潜在用途的其他想法。我想也许它可以用来支持某种类型的自定义选择器,尽管我不确定何时需要它,因为 jQuery 已经提供了很多选择器。
您会发现 jQuery 有一个围绕这个概念构建的方法。
jQuery.sub() http://api.jquery.com/jQuery.sub/
这允许您在本地扩展 jQuery,而不会“破坏”或“改变”全局 jQuery 对象。
从个人实验来看,我发现 jQuery 太复杂,无法改变init
函数无需处理各种令人讨厌的边缘情况。围绕 jQuery 对象创建工厂装饰方法要好得多。
更改 jQuery 方法或构造函数有很多用途,从日志记录到注入自定义逻辑(例如将 GUID 写入 jQuery 对象)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)