好久没写jquery源码的内容了..
jquery的发展有很大因素是因为它非常易于扩展,究其原因就得益于
extend函数
该函数是一个扩展函数…说是一个扩展函数,其实就是一个浅拷贝和深拷贝的函数而已.
该函数 确实很强大,而且写的很优雅..
先来看看用法,有三种用法.
1、$.extend(dest,src1,src2,src3…);
2、$.extend(src)
3、$.extend(boolean,dest,src1,src2,src3…)
意思就是将 src1,src2,src3合并到dest对象中..
特别说一下第三种,第一个参数的意义就在于 是否对src1,src2等进行深copy.
那么什么是深copy呢?
var ret=$.extend(true,{},
{name:”siren”,about:{age:24,country:”beijing”}},
{from:”hebei”,birthday:{year:1988,month:02}}
);
如果第一个值为true,那么就对src1,src2进行深copy.
这个时候ret返回值就是 ret={name:”siren”,about:{age:24,country:”beijing”},from:”hebei”,birthday:{year:1988,month:02}};
发现 连 about和birthday的属性都一起copy到了dest里面.这就是深copy.
那么看看源码
这是方法的定义部分.
我们逐行分析.
第2行 获取 extend传递进来的第一个参数..如果没有 初始化为一个对象.
4行获取参数的个数.
7行:如果第一个参数传递过来的是一个bool类型,这个时候用法就是我们前面提到的第三种.
12-14行:是一种规定,第一个参数要么是bool类型 要么是obj类型.当然在js里 obj类型也包括函数.
18-34行:进行复制.变量G是一个临时变量保存当前src的值.
比如执行 $.extend({},{a:10}); G就等于{a:10}
26-27行:如果进行深复制,src的属性也是一个对象并且不是一个element对象…这个时候再调用o.extend 递归进行复制.
否则
29-31行:L!==g. g是哪儿定义的?没定义 所以它等于undefined..
J[F] = L; F等于属性名称..L等于值.J就等于我们的dest.
怎么样明白了没有..这样我们也可以写出很牛的继承函数了哦..
我先来个简单的.
怎么样..是不是非常简单??
^.^
分享到:
相关推荐
在JavaScript中,jQuery库提供了两种扩展对象的方法,即`$.fn.extend`和`$.extend`。它们都用于增加或修改现有对象的功能,但应用场景不同。本文将深入解析这两种方法的实现原理和用途。 首先,`$.fn.extend`是用于...
`$.fn.extend`是jQuery库中的一个核心方法,主要用于扩展jQuery对象的方法集合。这个方法允许开发者自定义jQuery的函数,从而实现对DOM元素的操作或添加新的功能。在jQuery中,`$.fn`实际上是`$.prototype`的一个...
在jQuery库中,`$.fn.extend` 和 `$.extend` 是两个非常重要的功能,它们用于扩展jQuery的功能和对象。这两个函数虽然名字相似,但作用却截然不同。 首先,`$.fn.extend` 是用于扩展jQuery选择器对象的方法。当你...
在JavaScript开发中,`underscore` 和 `jQuery` 都提供了扩展对象的功能,即 `_.extend()` 和 `$.extend()` 方法。这两个方法允许开发者合并一个或多个对象的属性到目标对象中,实现对象间的属性拷贝。本文将深入...
在本篇文章中,我们将详细解析如何通过$.extend()方法扩展jQuery、如何通过$.fn向jQuery添加新的方法以及如何使用$.widget()方法应用jQuery UI的部件工厂方式创建插件。 首先,我们来看如何通过$.extend()方法扩展...
在JavaScript开发中,jQuery库提供了一个非常实用的工具函数`$.extend()`,它允许开发者合并两个或更多对象的属性到一个目标对象中。这个方法在处理复杂的数据结构和配置对象时,大大增加了代码的灵活性和可维护性。...
- **实用工具**:如$.each()用于迭代,$.extend()用于对象合并,$.trim()用于字符串修剪等。 4. **性能优化** - **缓存机制**:使用jQuery.cache存储DOM元素,减少不必要的DOM操作。 - **文档片段**:批量操作...
$.extend(obj1, obj2); // 结果:{a: 1, b: 3, c: 4} ``` 在这个例子中,`obj2`的属性`b`覆盖了`obj1`的`b`,而`c`则被添加到了`obj1`中。 ### 二、深拷贝与浅拷贝 jQuery.extend还提供了深拷贝和浅拷贝的功能。...
除了扩展静态方法之外,还可以使用`$.fn.extend`向每个jQuery实例对象中添加方法: ```javascript $.fn.extend({ hello: function () { alert('Hello!'); } }); ``` 现在,可以在任何jQuery对象上调用`hello`...
- **扩展插件功能**:开发者可以使用`$.extend()`为jQuery添加新的方法,扩展其功能。 - **合并数据**:在处理数据时,它可以用来合并多个数据源,形成一个完整的数据集。 5. **注意事项** - `$.extend()`不会...
2. 函数节流与延迟:jQuery的$.fn.extend方法用于扩展jQuery对象的方法,其中throttle和delay函数实现了函数执行的节流和延迟,优化了性能。 3. 事件处理:jQuery的事件系统通过$.event.add和$.event.remove管理...
这个方法和$.extend类似,不同的是它用于向jQuery.fn上添加方法,这样就为jQuery对象实例添加了“成员函数”。这样做的结果是,所有通过jQuery选择器得到的元素集合都能够使用这些新添加的方法。 4. $.fx $.fx是...
### jQuery.extend 函数详解 #### 一、概述 在JavaScript前端开发中,jQuery是一个非常流行的库,它简化了许多常见的操作,比如DOM操作、事件处理、AJAX交互等。`jQuery.extend`是jQuery提供的一个用于扩展jQuery...
- `$.extend()`:用于合并对象。 - `$.map()`:对数组进行映射操作。 - `$.each()`:遍历数组或对象。 - `$.type()`:检测变量类型。 - `$.grep()`:筛选数组。 2. **示例**:使用`$.each()`遍历数组。 ```...
jQuery简化了许多原生JavaScript操作,如$.extend()用于合并对象,$.noop()定义空函数,$.proxy()用于改变函数的作用域。此外,还涉及到了事件处理,如$.on()和$.off(),以及$.is()和$.not()等条件判断方法。 **第...
通过`$.fn.extend()`方法,开发者可以为jQuery对象添加新的方法,创建个性化的功能。 总结,jQuery源码分析涉及的内容广泛,包括选择器引擎、事件处理、DOM操作、动画效果、Ajax通信以及插件开发等多个方面。深入...
jQuery的插件生态丰富,通过$.fn.extend()可以扩展jQuery对象,创建自定义功能。例如,许多流行的插件如jQuery UI提供了更丰富的用户界面组件,而jQuery Validate则提供了表单验证功能。 七、实用工具方法 jQuery还...
需要注意的是,在使用$.fn.extend方法扩展jQuery对象时,我们通常会对$(this)进行操作,这里的$(this)指的是当前选中的jQuery对象。通过$(this)我们可以访问到当前的DOM元素,并在这个元素上绑定事件或修改属性。 ...
`$.extend` 函数则用于合并对象属性,它是实现 jQuery 插件扩展的重要工具。 总结来说,通过分析 jQuery 源码,我们可以了解到 jQuery 对象的生成、DOM 元素的处理、方法的添加以及插件扩展的机制。理解这些核心...