热连接/ bootstrapping jQuery的构造函数

时间:2011-04-20 15:04:18

标签: jquery

有没有办法热线(或引导,如果你愿意)jQuery的构造函数,以便在它的默认功能前面实现功能。例如;说我想实现自动缓存......

Peudo-code alert!

var _init = $.init;

var cache = [];

// override jQuery's init function (the function that gets executed when
// you query the DOM
$.init.prototype = function (selector, context, rootjQuery)
{
    // if whatever selector is run, is not in the cache; cache it, using
    // the "old" init function
    if (!cache[selector]) cache[selector] = _init(selector, context, rootjQuery);

    // return cached instance
    return cache[selector];
}

我知道这会破坏动态更新的元素。这里的目标是一个粗略的实现,它将被锁定在某个黑暗的角落里。我也承认这是违反一切常识的。但幽默我:)。

1 个答案:

答案 0 :(得分:2)

你想要的是jQuery.sub()

它允许创建jQuery的新副本并覆盖这些方法和属性,而不会破坏全局jQuery。

如果必须,您可以将这个jQuery子类注入全局范围。

(function() {
    var $$ = jQuery.sub();

    $$.fn.init = function() {

        var obj = $.apply(null, arguments);
        console.log("object: ", obj);
        return obj;
    };

    $$(function() {
        // do stuff with overwritten jQuery.
        $$("div");
    });

})();

live example

最好只创建一个返回jQuery对象的工厂,因为jQuery有太多的闭包,你真的需要知道究竟发生了什么,或者它会破坏。

记录的第二个对象确实是文档和$$(f)调用中的文档,因为当您使用jQuery作为就绪处理程序时,选择器将成为文档。