扩展jQuery核心的用处

时间:2011-04-30 14:45:29

标签: jquery core override extending

我发现了一种扩展核心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已经提供了很多选择器。

1 个答案:

答案 0 :(得分:2)

你会发现jQuery有一个围绕这个概念构建的方法。

jQuery.sub()

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

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

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