有没有办法热线(或引导,如果你愿意)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];
}
我知道这会破坏动态更新的元素。这里的目标是一个粗略的实现,它将被锁定在某个黑暗的角落里。我也承认这是违反一切常识的。但幽默我:)。
答案 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");
});
})();
最好只创建一个返回jQuery对象的工厂,因为jQuery有太多的闭包,你真的需要知道究竟发生了什么,或者它会破坏。
记录的第二个对象确实是文档和$$(f)
调用中的文档,因为当您使用jQuery作为就绪处理程序时,选择器将成为文档。