解读jquery的extend

jQuery的extend方法很有用,jquery的很多工具方法,和实例方法都是通过extend实现的。我们一起来看一下

这个方法是怎么写的。

  jQuery.extend = jQuery.fn.extend = function() {

var options, name, src, copy, copyIsArray, clone,

3target = arguments[0] || {},

i = 1,

length = arguments.length,

deep = false;

 

// Handle a deep copy situation

if ( typeof target === "boolean" ) {

deep = target;

 

// skip the boolean and the target

target = arguments[ i ] || {};

i++;

}

 

// Handle case when target is a string or something (possible in deep copy)

if ( typeof target !== "object" && !jQuery.isFunction(target) ) {

target = {};

}

 

// extend jQuery itself if only one argument is passed

if ( i === length ) {

target = this;

i--;

}

 

for ( ; i < length; i++ ) {

// Only deal with non-null/undefined values

if ( (options = arguments[ i ]) != null ) {

// Extend the base object

for ( name in options ) {

src = target[ name ];

copy = options[ name ];

 

// Prevent never-ending loop

if ( target === copy ) {

continue;

}

 

// Recurse if we're merging plain objects or arrays

if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = 29jQuery.isArray(copy)) ) ) {

if ( copyIsArray ) {

copyIsArray = false;

clone = src && jQuery.isArray(src) ? src : [];

 

} else {

clone = src && jQuery.isPlainObject(src) ? src : {};

}

 

// Never move original objects, clone them

target[ name ] = jQuery.extend( deep, clone, 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.fn = jQuery.prototype,所以就是通过jQuery.fn.extend实现向jQuery添加实例方法,通过jQuery.extend向jQuery添加工具方法。

首选通过target = arguments[0] || {}取得第extend的第一个参数为目标对像,后边又判断如果typeof target === "boolean" 如果第一个参数是boolean的话说明是深拷贝,那么目标对像为第二个参数 target = arguments[ i ] || {} ;i++。如果参数只有一个的话那么目录对像就是jQuery或者是jQuery.prototype,

那么以下内容就是遍历除参数,把每个对像参数的属性拷贝到目标对像上,如果第一个参数是true的话就用递归实现深拷贝

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值