今天看了下jqueryUI中jquery.ui.widget.js中的源码,看到如下 代码。
var _cleanData = $.cleanData;
$.cleanData = function( elems ) {
for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
$( elem ).triggerHandler( "remove" );
}
_cleanData( elems );
};
想了半天,他为什么在这样写?
以下是我的想法。
这里使用了代理模式,jquery.js存在$.cleanData这个方法,它的作用是删除对象或元素上的缓存,
var _cleanData = $.cleanData;
上面这句话是将jquery的原始方法代理到jqueryUI中,然后增加一些附加功能:
for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
$( elem ).triggerHandler( "remove" );
}
这里进行了重写,因为jqueryUI有一个自定义的remove事件,先清除UI控件中绑定的remove那部分逻辑,再执行原始的jquery方法。