原来 jQuery 1.5 有一个新方法叫做 sub :)
根据文档,子
创建一个新的副本
jQuery 的属性和方法
可以修改而不影响
原始的 jQuery 对象。
http://api.jquery.com/jQuery.sub/
此方法不允许您对子类进行子类化,但我在他们的票务跟踪器中发现了一个允许这样做的修改方法:
jQuery.subclass = function(){
function jQuerySubclass( selector, context ) {
return new jQuerySubclass.fn.init( selector, context );
}
jQuery.extend(true, jQuerySubclass, this);
jQuerySubclass.superclass = this;
jQuerySubclass.fn = jQuerySubclass.prototype = this();
jQuerySubclass.fn.constructor = jQuerySubclass;
jQuerySubclass.fn.init = function init( selector, context ) {
if (context && context instanceof jQuery && !(context instanceof jQuerySubclass)){
context = jQuerySubclass(context);
}
return jQuery.fn.init.call( this, selector, context, rootjQuerySubclass );
};
jQuerySubclass.fn.init.prototype = jQuerySubclass.fn;
var rootjQuerySubclass = jQuerySubclass(document);
return jQuerySubclass;
};
这允许你做这样的事情:
var Calendar = jQuery.subclass();
Calendar.create = function() {
var cal = Calendar( /* some html code for building the calendar */ );
// Do some processing like binding events, etc
return cal;
}
Calendar.fn.val = function(value) {
//Calendar's implementation of val
}
Calendar 对象的作用就像 jQuery 对象一样除了 上面的那些差异。当我将方法链接在一起时,它也会正确返回一个 Calendar 实例。这很整洁,因为
- 我们可以轻松构建自定义小部件
不会弄乱 jQuery
命名空间。
- 我们可以提供自己的 jQuery 方法实现
- 我们可以利用 jQuery 的强大功能,例如 trigger 和 bind 已经是类的一部分
接下来,我对允许通过选择器注册类感兴趣。这样,当您调用 $('.MyAwesomeCalendar') 时,您将返回一个 Calendar 对象,而无需显式调用 Calendar('.MyAwesomeCalendar')。