为了账号安全,请及时绑定邮箱和手机立即绑定
很精妙!self 存在外部引用 + 闭包
将观察者都搞在一个集合中,当被观察者发生变化,就直接找到这个集合,并运行其中的函数。
再扩展一下:
可能有很多被观察者,每个被观察者都对应一个观察者集合,所以我们需要一个‘池’ 来存储这些集合。那么 键值对 的格式就很符合。 { 被观察者1:[观察者集合] , 被观察者2:[观察者集合]....}
回调可以实现异步

最新回答 / 菜狗
那里面的self本身不是window,你调试的时候显示window是因为chrome自己本身把window存在了一个叫self的变量上,原来的里面的self值已经return给外面的cbs了。。。= =不执行示例代码直接打印self也是window
关于slice感觉有点误解大家,并不是因为匹配的结果是数组,而是jquery原型上封装了slice方法
“除此之外类一的所有方法都是拷贝到当前实例对象上。类二则是要通过scope连接到原型链上查找,这样就无形之中要多一层作用域链的查找了” 这句话啥意思
$.data()和.data()方法虽然大体的意思一样,但是2个接口在处理上却有差别,mark。
javascript对象与DOM对象的相互引用易产生内存泄漏。
为了避免内存泄漏,我们要尽量避免 引用数据(这里的引用数据可以说是javascript对象) 直接依附在DOM对象上。
注意:javascript中的Array对象的indexOf()方法,如果要检索的字符串值没有出现,则该方法返回 -1, 返回-1,返回-1 !!!
once 表示:遍历完列表后,立即将列表清空。
定义一个函数(对象),该函数的每一个实例内部存在一个数组,这个数组包含了所有观察者。实例中的add remove fire等方法都是对这个数组进行操作。
‘通过回调函数callback返回的ture/false的布尔值结果就可以来判断当前是否要强制退出循环’,这样做的好处:
提高性能
为什么呢?
比如我们要把包含5个<li>的jQuery对象中的前三个li元素隐藏。
两种方法:
1 $fiveLi.each(function(index,ele){if(index <3){$(ele).hide()}});//这样会循环5次
2 $fiveLi.each(function(index,ele){if(index >= 3){return false} $(ele).hide()}) // 这样只会循环3次
回顾:pushStack做了四件事
1 新建一个空的jQuery对象
2 新建的空对象将参数(实际上也是一个对象)包含合并
3 将合并后的jQuery对象的pervObject指向this
4 返回合并后的对象

再来分析一下eq()的源码:
eq()首先解析传入的参数,该不动的不动,该转换的转换;然后调用pushStack()函数,并将对应的DOM对象作为参数传入,然后将pushStack()函数返回的jQuery对象返回。
注意: 返回的jQuery对象的prevObject已经指向了调用eq()方法的对象。比如: aObj.eq(0).prevObject-->aObj
pushStack: function( elems ) {
// Build a new jQuery matched element set
var ret = jQuery.merge( this.constructor(), elems );
// Add the old object onto the stack (as a reference)
ret.prevObject = this;
ret.context = this.context;
// Return new jQueryObject
return ret;
}
大家一定要注意:eq() 方法取出来的是 jQuery对象,而get()取出来的是DOM对象。
解释一下这句话(流程解析中的1): ‘因为constructor是指向构造器的,所以这里就等同于调用jQuery()方法了’
我们知道:
1 jQuery = function(){ return new jQuery.fn.init(); }
2 jQuery.fn = jQuery.prototype = { init:function(){//.....} , constructor:jQuery }
所以 this.constructor() == jQuery()
课程须知
源码的阅读不是一蹴而就的,需要大家有一定的功底,比如jQuery的基础运用以及API的熟悉度,除此之外要有牢固的javascript、DOM、CSS的基础功底,甚至还需要理解常见的设计模式、数据结构等等。当然大家也不要被这些给吓住了,理解,总是需要一种慢慢的学习过程。
老师告诉你能学到什么?
通过本课程的学习,您可以由浅入深地剖析jQuery库的设计与实现。 其中我们围绕的重心: 1、设计理念 2、结构组织 3、接口设计 4、模式运用 5、场景套用

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消