扩展jQuery核心的用处

我发现了一种扩展核心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()

这允许您在本地扩展jQuery而不会“破坏”或“改变”全局jQuery对象。

从个人实验中我发现jQuery太复杂了,无法改变init函数而不处理各种令人讨厌的边缘情况。 围绕jQuery对象创建工厂装饰方法要好得多。

更改jQuery方法或构造函数有很多用途,从记录到注入自定义逻辑,如将GUID写入jQuery对象。