须要留意的是这一句 jQuery.extend = jQuery.fn.extend = function() {} ,也就是 jQuery.extend 的实现和 jQuery.fn.extend 的实现共用了同一个办法,然则为什么可以或许实现不合的功能了,这就要归功于 Javascript 强大年夜(怪异?)的 this 了。
了一幅简单的流程图赞助懂得:
1)在 jQuery.extend() 中,this 的指向是 jQuery 对象(或者说是 jQuery 类),所以这里扩大在 jQuery 上;
被选择了 ('div').eq(0) 之后应用 end() 可以回溯到上一步选中的 jQuery 对象 $('div'),其内部实现其实是依附添加了 prevObject 这个属性:
2)在 jQuery.fn.extend() 中,this 的指向是 fn 对象,前面有提到 jQuery.fn = jQuery.prototype ,也就是这里增长的是原型办法,也就是对象办法。
jQuery 的链式调用及回溯
办法的重载等于一个办法实现多种功能,经常又是 get 又是 set,固然浏览起来十分不易,然则大年夜实用性的角度推敲,这也是为什么 jQuery 如斯受迎接的原因,大年夜多半人应用 jQuery() 构造办法应用的最多的就是直接实例化一个 jQuery 对象,但其实袈溱它的内部实现中,有着 9 种不合的办法重载场景:
另一个让大年夜家爱好应用 jQuery 的原因是它的链式调用,这一点的实现其实很简单,只须要在要实现链式调用的办法的返回结不雅里,返回 this ,就可以或许实现链式调用了。
当然,除了链式调用,jQuery 甚至还许可回溯,看看:
- // 经由过程 end() 办法终止在当前链的最新过滤操作,返回上一个对象集合
- $('div').eq(0).show().end().eq(1).hide();

jQuery 完全的链式调用、增栈、回溯经由过程 return this 、 return this.pushStack() 、return this.prevObject 实现,看看源码实现:
- jQuery.fn = jQuery.prototype = {
- // 将一个 DOM 元素集合参加到 jQuery 栈
- // 此办法在 jQuery 的 DOM 操作中被频繁的应用, 如在 parent(), find(), filter() 中
- // pushStack() 办法经由过程改变一个 jQuery 对象的 prevObject 属性来跟踪链式调用中前一个办法返回的 DOM 结不雅集合
- // 当我们在链式调用 end() 办法后, 内部就返回当前 jQuery 对象的 prevObject 属性
- pushStack: function(elems) {
- // 构建一个新的jQuery对象,无参的 this.constructor(),只是返回引用this
- // jQuery.merge 把 elems 节点归并到新的 jQuery 对象
推荐阅读
深度学习训练时 GPU 温度过高?输入这几行命令就能迅速降温
【技巧沙龙】AI开辟者拭魅战营-7分钟打造1个定制技能。7月22号,我们等你一路! 新买回来的不带水冷公版GPU,在满负载运行的时刻,温度大年夜室温立时飙升到85度,并且模型练习不是几分钟>>>详细阅读
地址:http://www.17bianji.com/lsqh/36245.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示