Author: raphealguo
jQuery源码剖析(六)——类数组
前言
页面上如果有多个属性为class=”clr”的节点,通过jQuery操作可以拿到这些DOM节点,并包装为jQ对象:var doms = $(‘.clr’);
很容易就联想到doms应该返回的是一个数组。
这个问题很好解决,我们可以理解成jQuery继承了Array这个类。
于是doms可以像数组那样操作子元素。例如:
doms.length可以获取jQuery获取到的DOM节点的数目,经常会用 doms.length==0 来判断获取到的DOM是否为空或者不存在
doms[0]可以拿到第一个DOM节点对象(注意这里不是jQ对象!)
在实际的操作中,需要经常用到的这两个有关类数组的操作就够了。 [Read more...]
jQuery源码剖析(五)——jQuery对象
前言
如果需要理解透jQuery设计的思想,那当然必须要理解什么是jQ对象。
用jQuery的时候经常会听到jQ对象,例如:var dom$ = $(“#id”); 这里的dom$我们成为jQ对象。
那到底这货是啥呢?
这里假定大部分看这篇文章的人都能够懂面向对象的基本想法,面向对象的思想本来就是抽象现实世界的东西,所以要用来讲解某些道理时是很让人接受的,我认为这也就是为什么吹面向对象在大型项目中容易维护的原因之一(因为它符合我们人的思维方式)。 [Read more...]
jQuery源码剖析(四)——$(document).ready
前言
在浏览器把DOM树渲染好之前,javascript是无法操作没渲染好的DOM节点。
例如:
1 2 3 4 5 6 | <script> var dom = document.getElementById("test"); //由于script先执行,此时浏览器的还没渲染id为test的DOM节点,所以这里拿不到 </script> <div id="test"> </div> |
这是很多新手在操作DOM树容易犯的错:在文档DOM就绪前就取DOM节点。
jQuery提供了ready函数,你可以在ready里边添加回调,jQuery会保证在文档就绪后依次执行这些回调。 [Read more...]
jQuery源码剖析(三)——$.Deferred
前言
接上一篇《jQuery源码剖析(二)——$.Callbacks》,对于javascript来说,回调这个概念无处不在,bang上次还抱怨nodejs里边读取文件内容都要回调,这里读取文件内容其实就是异步的场景。异步真是无处不在的:ajax请求,页面动画。
对于读取文件内容这个场景,通过$.Callbacks来表述读取某个文件的场景,就是以下代码:
1 2 3 4 5 6 7 8 9 10 | var callbacks = $.Callbacks(); callbacks.add(function(){ alert('读取到内容'); }); callbacks.add(function(content){ alert('内容:' + content); }); read('raphealguo.txt', function(content){ callbacks.fire(content); }); |
显然这样的做法不优雅,每次要读一个文件必须定义一个callback管理器实例。
而且读取文件有可能有失败的情况,这样就还得要去定义多一个callback管理器去处理失败的回调队列。 [Read more...]
jQuery源码剖析(二)——$.Callbacks
前言
上一篇《jQuery源码剖析(一)——概览&工具方法》最后说要了解一下jQuery的ready实现。
为了彻底理解jQuery的ready实现,所以需要理解什么是异步队列。
为了彻底理解jQuery的异步队列实现,所以需要理解什么是回调函数队列管理器(姑且叫这个名字吧,其实就是jQuery.Callbacks)。
可以看到学习实际上就是一个拓扑的问题,这篇文章完全是剖析$.Callbacks的原理&实现。
官方文档上写到$.Callbacks的用途:
A multi-purpose callbacks list object that provides a powerful way to manage callback lists.
$.Callbacks是在1.7的版本之后新增的,它提供了一些很优美的方法来管理回调函数队列。 [Read more...]
jQuery源码剖析(一)——概览&工具方法
前言
其实这剖析jQuery源码系列文章是我自己酝酿很久的想法,当然因为之前的不成熟以及理解不深刻一直不敢提笔写。近期阅读的书籍多,激发我写文章的欲望,于是把这个计划开始实施。
为什么要选择jQuery源码,我想对于一个前端开发人员来说,不言自明。jQuery的出现对于众多前端开发人员来说,是一个无比强大的武器。那为什么jQuery如此流行,深得大家喜欢?我认为秘籍就在于jQuery的API设计。
在jQuery的设计中,最主要的两块就是(个人看法):
- 提供工具方法;
- DOM元素的操作,包括选取,属性取值等等。
对于一个库来说,第一点是必然要有所体现的,没有基础的工具方法,如何成为库。
对于Javascript来说,最重要的一块就是DOM操作,jQuery在DOM操作这块的贡献是巨大的,以至于现在很多新手完全不会用原生的JS API(例如document.getElementById等)了,jQuery把复杂的DOM选取映射到了简单的CSS选择器,对复杂的DOM操作(不同浏览器的DOM操作接口不一致)封装非常简单的委托API,以达到其核心的目的:The Write Less, Do More。 [Read more...]
一笔画
【北京之旅】
依旧延续去年的做法,实习完之后带着娜娜在北京旅游一趟才回学校。 这次比去年杭州之旅相比,住宿跟交通费已经算节省了很大一笔,本来计划是要吃几顿好的。
交通、住宿
北京这个地方的公共交通只有一个优点:便宜! 办理一张公交卡,坐地铁从北6环到南4环也才2块钱(坐公交4毛钱)。这也给旅游预算腾出很大空间。 公交跟广州没啥区别,北京地铁站设备环境比广州差了不是一个等级,但之后回到广州还真不习惯广州地铁的贵!北京人口多,遇到上下班时间,光是排队进地铁站都半个小时了(在我住的地方:沙河)。 这趟旅游最累的就是每天需要从住的地方坐2个小时地铁去市区。刚刚到北京时跟同学一起租在北六环的沙河,沙河这个地方特别脏(应该说北京给我的第一印象就是空气特脏,到处都是灰蒙蒙的),沙河这边很多人素质还比较低,乡下的感觉,垃圾到处丢,每天都有恶臭味。住的公寓的水是地下水,煮完水之后都有一层漂浮物在上边,喝起来有股味道,洗的衣服也会发黄,想必跟附近经常烧垃圾等有关系。还有,沙河地铁站外边遇到下雨就是一路淤泥,特别不爽。但这边也有几个好处:便宜(一个月房租700,房间还特别大)并且离公司(百度在北五环,地铁过去20分钟)不会很远;周围水果特便宜;超市商品价格也很低。
景点
北京的景点还是很多的,计划去不少景点,但是后来由于花了几天陪娜娜的爸爸去协和看病,所以只去了出名的几个。
天坛、天安门、故宫
天坛、天安门、故宫是第一站,去的时候是周六,游客还是蛮多的。天坛没有想象中那么神秘跟庄严,个人觉得跟普通的公园差不了太多,就是几个建筑比较特别,祈年殿给我印象比较深,天坛很多围墙都是圆形的,古代人天圆地方的概念在这体现了。特意还数了天坛里边的台阶,都是9的倍数阶,是意味九重天? [Read more...]
【算法入门】深度优先搜索(DFS)
1.前言
深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法。它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解,那就返回到上一个节点,然后从另一条路开始走到底,这种尽量往深处走的概念即是深度优先的概念。
你可以跳过第二节先看第三节,:)
2.深度优先搜索VS广度优先搜索
2.1演示深度优先搜索的过程
还是引用上篇文章的样例图,起点仍然是V0,我们修改一下题目意思,只需要让你找出一条V0到V6的道路,而无需最短路。
图2-1 寻找V0到V6的一条路(无需最短路径)
假设按照以下的顺序来搜索:
1.V0->V1->V4,此时到底尽头,仍然到不了V6,于是原路返回到V1去搜索其他路径;
2.返回到V1后既搜索V2,于是搜索路径是V0->V1->V2->V6,,找到目标节点,返回有解。
这样搜索只是2步就到达了,但是如果用BFS的话就需要多几步。 [Read more...]