2

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

4

1 回答 1

2

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

jQuery.sub()

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

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

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

于 2011-04-30T14:49:37.767 回答