首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

jQuery承袭的实现(extends)

2012-11-23 
jQuery继承的实现(extends)jQuery中的extend方法通过不同的参数实现了几种不同的继承方法:1.extend(src)ta

jQuery继承的实现(extends)

jQuery中的extend方法通过不同的参数实现了几种不同的继承方法:

1.extend(src) target = {};

// extend jQuery itself if only one argument is passed /*如果参数长度为1,则将参数表示的对象的属性和方法复 制给jQuery本身*/
if ( length == i ) {
target = this;
--i;
}

for ( ; i < length; i++ )
// Only deal with non-null/undefined values当参数都为非空时,
if ( (options = arguments[ i ]) != null )
// Extend the base object
for ( var name in options ) {
var src = target[ name ], copy = options[ name ];

// Prevent never-ending loop /*防止死循环*/
if ( target === copy )
continue;

// Recurse if we're merging object values/*深度继承的实现*/
if ( deep && copy && typeof copy == "object" && !copy.nodeType )
target[ name ] = jQuery.extend( deep,
// Never move original objects, clone them
src || ( copy.length != null ? [ ] : { } )
, copy );

// Don't bring in undefined values /*正常情况下的继承实现*/
else if ( copy !== undefined )
target[ name ] = copy;

}

// Return the modified object
return target;
};

注意:

在这里还有一个特殊的地方,就是在函数开头的地方有jQuery.extend = jQuery.fn.extend,而在程序的前面已经将jQuery.prototype赋值给jQuery.fn了,所以在后面的调用中会出现jQuery.extend()和jQuery.fn.extend()的不同调用,这两个方法调用产生的结果也不一样,jQuery.extend()的调用并不会把方法扩展到对象的实例上,引用它的方法也需要通过jQuery类来实现,如jQuery.init(),而jQuery.fn.extend()的调用把方法扩展到了对象的prototype上,所以实例化一个jQuery对象的时候,它就具有了这些方法,这是很重要的,在jQuery.js中到处体现这一点