为了账号安全,请及时绑定邮箱和手机立即绑定
注意: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对象是一个类数组对象,注意:类数组对象并不是数组!
至于栈结构:则是先进后出,FILO( first in last out ),类似于一个没有盖的木桶,第一次放进去的水(假设不考虑水分子的运动)在最下面,第二次放进去的水在第一次放进去的水的上面....取水时,先取最后一次放进去的水,第一次放进去的水反而最后取出来。
1 插件分两种,一种是静态函数: 不用实例化就可以直接调用,比如:Math.floor();另一种是实例方法:只有实例才能使用,比如: var a = 'hah' ; a.length
2 jQuery.extend() 和 jQuery.fn.extend() 指向的都是同一个函数,之所以能实现不同的功能,就死因为函数内部通过对 this 进行判断进而实现了重载。
3 详细的关于extend()函数的讲解,在我的博客:http://www.cnblogs.com/MnCu8261/p/6039986.html
所以我们如果需要链式的处理,只需要在方法内部方法当前的这个实例对象this就可以了。 课程中的这句话有歧义: 1 像css() hide() addClass() show()等这些方法,直接返回this是没有问题的。
2 而next() childern() parent() 等这些方法,则需要对this进行处理,然后将处理之后的结果进行返回。
不过,总之,链式处理的前提必须是方法中必须返回一个或者一些实例对象
我觉得叫苦是没用的,本课程的讲解是有前提的----必需熟练掌握javascript基础知识!不掌握这些知识肯定看不懂,其次,我们还要对面向对象,插件编写等有一定的了解,否则我们只能读懂代码,但不清楚:为啥要这样做?如果用那样的方式不是会更简单吗?这么绕来绕去有啥用? 再就是,即使我们能做到以上两点,我们就能游刃有余的学习这门课程了么?我只能说:骚年,图样图私募跑! 我们需要反复阅读本课程,很多东西需要我们反复思考才能理解,才能查漏补缺。
js中的面向对象这一块不熟悉的,可以看我的博客:http://www.cnblogs.com/MnCu8261/p/5965397.html
我做了将近两年的前端,看着还是感觉费劲
在javascript的世界中一共有四种上下文调用方式:方法调用模式、函数调用模式、构造器调用模式、apply调用模式。我要分别解释一下:
方法调用模式: 类似于foo.bar(),函数作为一个对象的方法出现,this指向foo。
函数调用模式:类似于bar(),函数单独出现,this指向window
构造器调用模式:类似于 var foo = new bar(),this指向new bar()返回的对象。
apply调用:类似于bar.apply(object),this指向object
课程须知
源码的阅读不是一蹴而就的,需要大家有一定的功底,比如jQuery的基础运用以及API的熟悉度,除此之外要有牢固的javascript、DOM、CSS的基础功底,甚至还需要理解常见的设计模式、数据结构等等。当然大家也不要被这些给吓住了,理解,总是需要一种慢慢的学习过程。
老师告诉你能学到什么?
通过本课程的学习,您可以由浅入深地剖析jQuery库的设计与实现。 其中我们围绕的重心: 1、设计理念 2、结构组织 3、接口设计 4、模式运用 5、场景套用

微信扫码,参与3人拼团

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

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

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消