-
理解观察者模式:发布订阅(Publish/Subscribe)
观察者的使用场合就是:当一个对象的改变需要同时改变其它对象,并且它不知道具体有多少对象需要改变的时候,就应该考虑使用观察者模式。
JS里对观察者模式的实现是通过回调来实现的,作为 $.Callbacks() 的创建组件的一个演示,只使用回调函数列表,就可以实现 Pub/Sub 系统,将 $.Callbacks 作为一个队列。
查看全部 -
使用回调函数,总的来说弱化耦合,让调用者与被调用者分开。
调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型、某些限制条件的被调用函数
查看全部 -
函数本质:简单的理解函数本质上就是输入和输出之间实现过程的映射
理解JS中的函数:
1、能“存储”在变量中
2、能作为函数的实参被传递
3、能在函数中被创建
4、能从函数中返回
理解JS中的回调函数:
1、使用回调函数方便异步处理,例如AJAX
2、要求执行某些操作后执行回调函数
查看全部 -
$.each()函数和$(selector).each()是不一样的,后者是专门用来遍历一个jQuery对象的,是为jQuery内部服务的。
$.each()函数可用于迭代任何集合,无论是“名/值”对象(JavaScript对象)或数组。
jQuery的实例方法最终也是调用的静态方法。
查看全部 -
迭代器设计:迭代器是一个框架的重要设计。我们经常需要提供一种方法顺序用来处理聚合对象中各个元素,而又不暴露该对象的内部,这也是设计模式中的迭代器模式(Iterator)
查看全部 -
通过eq方法只能产生一个新的对象,但是如果需要的是一个合集对象要怎么处理:
使用.slice( start [, end ] )
查看全部 -
get与eq的区别:
eq返回的是一个jQuery对象,get返回的是一个DOM对象
查看全部 -
end与addBack的链式属性:
新jQuery对象添加prevObject属性,我们看到prevObject其实还是当前jQuery的一个引用罢了,所以也就是为什么通过prevObject能取到上一个合集的原因了
查看全部 -
回溯处理的设计:
1、.end():可以回溯到之前的Dom元素集合,prevObject
2、.addBack():调用它会在栈中回溯一个位置,然后把两个位置上的元素集组合起来,并把这个新的、组合之后的元素集推入栈的上方。
利用这个DOM元素栈可以减少重复的查询和遍历的操作,而减少重复操作也正是优化jQuery代码性能的关键所在。
查看全部 -
插件接口的设计:接口自定义扩展
jQuery.extend({ data:function(){}, removeData:function(){} }) jQuery.fn.extend({ data:function(){}, removeData:function(){} })
查看全部 -
jQuery.extend( object ) 表示将object合并至jQuery上
jQuery.extend( target, object1, object2) 表示将object1, object2合并至target上
这也是target如下设置的原因
var target = arguments[0] || {}, i = 1, length = arguments.length; //只有一个参数,就是对jQuery自身的扩展处理 if (i === length) { target = this; //调用的上下文对象jQuery/或者实例 i--; }
查看全部 -
jQuery的Internal DSL形式带来的好处
1、编写代码时,让代码更贴近作者的思维模式;
2、阅读代码时,让读者更容易理解代码的含义;
3、应用DSL可以有效的提高系统的可维护性(缩小了实现模型和领域模型的距离,提高了实现的可读性)和灵活性,并且提供开发的效率
jQuery的这种管道风格的DSL链式代码,总的来说:
1、节约JS代码;
2、所返回的都是同一个对象,可以提高代码的效率。
通过简单扩展原型方法并通过return this的形式来实现跨浏览器的链式调用。
但是这种方法有一个问题是:所有对象的方法返回的都是对象本身,也就是说没有返回值,所以这种方法不一定在任何环境下都适合
查看全部 -
DSL是指Domain Specific Language,也就是用于描述和解决特定领域问题的语言
DSL分为内部DSL和外部DSL。
jQuery属于内部DSL。外部DSL需要编写解析器。
查看全部 -
静态与实例方法共享设计:实例方法取于静态方法
function jQuery() {...} jQuery.each = function(){...} jQuery.prototype = { each: function( callback, args ) { return jQuery.each( this, callback, args ); } }
查看全部 -
jQuery分离构造器
- 不使用new 构造对象
- 为了避免死循环,将jQuery原型上的init方法作为构造函数,init中的this完全引用不到jQuery的原型,所以这里通过new把init方法与ajQuery给分离成2个独立的构造器
- 为什么init一定要放在jQuery原型上,单独写不好吗?
查看全部
举报