我发现了一种扩展核心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已经提供了很多选择器。
答案 0 :(得分:2)
你会发现jQuery有一个围绕这个概念构建的方法。
这允许您在本地扩展jQuery而不会“破坏”或“改变”全局jQuery对象。
从个人实验中我发现jQuery太复杂了,无法改变init
函数而不处理各种令人讨厌的边缘情况。围绕jQuery对象创建工厂装饰方法要好得多。
更改jQuery方法或构造函数有很多用途,从记录到注入自定义逻辑,如将GUID编写到jQuery对象上。