为了账号安全,请及时绑定邮箱和手机立即绑定
  • 立即调用表达式 任何库与框架设计的第一个要点就是解决命名空间与变量污染的问题。jQuery就是利用了JavaScript函数作用域的特性,采用立即调用表达式包裹了自身的方法来解决这个问题。 匿名函数,就是没有函数名的函数,也就是不存在外部引用。 function(){ //代码逻辑 } 上面这种写法是错了,声明了它但是又不给名字又没有使用,所以在语法上错误的。 要调用一个函数,我们必须要有方法定位它、引用它。所以,我们要取一个名字: var jQuery = function(){ //代码逻辑 } Query使用()将匿名函数括起来,然后后面再加一对小括号(包含参数列表),那么这小括号能把我们的表达式组合分块,并且每一块(也就是每一对小括号),都有一个返回值。这个返回值实际上也就是小括号中表达式的返回值。所以,当我们用一对小括号把匿名函数括起来的时候,实际上小括号返回的,就是一个匿名函数的Function对象。 总结:全局变量是魔鬼, 匿名函数可以有效的保证在页面上写入JavaScript,而不会造成全局变量的污染,通过小括号,让其加载的时候立即初始化,这样就形成了一个单例模式的效果从而只会执行一次。
    查看全部
  • (function(window, undefined) { var jQuery = function() {} window.jQuery = window.$ = jQuery; })(window); window和undefined都是为了减少变量查找所经过的scope作用域。当window通过传递给闭包内部之后,在闭包内部使用它的时候,可以把它当成一个局部变量,显然比原先在window scope下查找的时候要快一些。
    查看全部
  • jquery post,get 调用ajax 方法
    查看全部
    0 采集 收起 来源:jQuery整体架构

    2015-06-09

  • 数组模拟的有问题,输入-1的时候就无法取值,改成下面这样应该可以: ajQuery.fn = ajQuery.prototype = { resultarry:[], init: function(selector) { this.selector = selector; //模拟出数组格式 var results = document.querySelectorAll(selector); for (var i = 0; i < results.length; i++) { this.resultarry[i] = results[i]; } return this; }, constructor: ajQuery } 然后get方法改成: get: function(num) { if (num != null) { return (num < 0 ? this.resultarry[num + this.resultarry.length] : this.resultarry[num])
    查看全部
  • 代碼快照
    查看全部
    0 采集 收起 来源:jQuery设计理念

    2015-05-21

  • 正则好复杂的样子 //分组 var rcomma = /^[\x20\t\r\n\f]*,[\x20\t\r\n\f]*/; //关系符 var rcombinators = /^[\x20\t\r\n\f]*([>+~]|[\x20\t\r\n\f])[\x20\t\r\n\f]*/; //空白 var whitespace = "[\\x20\\t\\r\\n\\f]";
    查看全部
  • 祖宗和后代 空格 父亲和儿子 > 临近兄弟 + 普通兄弟 ~
    查看全部
    0 采集 收起 来源:Sizzle解析原理

    2018-03-22

  • $('*').data 与 $.data 的区别在于,前者由源码可知是访问DOM元素进行标记 unlock 的,而后者是对jQuery对象标记 unlock。 多个jQuery对象在相同选择符参数的情况下对应相同的DOM元素,因此设定是覆盖的。而不同的jQuery对象在处理上是分别设定的.
    查看全部
    0 采集 收起 来源:静态接口设计

    2015-05-17

  • 不理解:Deferred整体结构
    查看全部
    0 采集 收起 来源:$.Deferred的设计

    2015-05-17

  • 基本筛选器: eq get first lang It not odd root... 内容筛选器: contains empty has parent... 可见筛选器: hidden visible 子元素筛选器: first-child nth-child only-child... 表单: bottom checkbox foucs input text...
    查看全部
    0 采集 收起 来源:理解CSS选择器

    2015-05-16

  • jQuery.each(tuples, function(i, tuple) { //取出参数 var fn = jQuery.isFunction(fns[i]) && fns[i]; // deferred[ done | fail | progress ] for forwarding actions to newDefer // 添加done fail progress的处理方法 // 针对延时对象直接做了处理 deferred[tuple[1]](function() { var returned = fn && fn.apply(this, arguments); if (returned && jQuery.isFunction(returned.promise)) { returned.promise() .done(newDefer.resolve) .fail(newDefer.reject) .progress(newDefer.notify); } else { newDefer[tuple[0] + "With"](this === promise ? newDefer.promise() : this, fn ? [returned] : arguments); } }); 把then的方法通过: deferred.done deferred.fail deferred.progress 加入到上一个对象的各自的执行队列中保存了。这样就实现了不同对象之间的关联调用。 同样如果then返回的是一个promise对象(ajax)的时候: if (returned && jQuery.isFunction(returned.promise)) { returned.promise() .done(newDefer.resolve) .fail(newDefer.reject) .progress(newDefer.notify); 也可以直接处理了。
    查看全部
  • 缓存支持的参数
    查看全部
  • --> 快捷方法: jQuery.get() jQuery.getJSON() jQuery.getScript() jQuery.post() jQuery接口的设计原理 业务逻辑是复杂多变的,jQuery的高层API数量非常多,而且也非常的细致,这样做可以更友好的便于开发者的操作,不需要必须在一个接口上重载太多的动作。我们在深入内部看看Ajax的高层方法其实都是统一调用了一个静态的jQuery.ajax方法,代码见右侧代码编辑器(27-43行)。 在jQuery.ajax的内部实现是非常复杂的,首先ajax要考虑异步的处理与回调的统一性,所以就引入了异步队列模块(Deferred)与回调模块(Callbacks), 所以要把这些模块方法在ajax方法内部再次封装成、构建出一个新的jQXHR对象,针对参数的默认处理,数据传输的格式化等等。
    查看全部
    0 采集 收起 来源:jQuery整体架构

    2018-03-22

  • jQuery一共13个模块,从2.1版开始jQuery支持通过AMD模块划分,jQuery在最开始发布的1.0版本是很简单的,只有CSS选择符、事件处理和AJAX交互3大块。其发展过程中,有几次重要的变革: ☑ 1.2.3 版发布,引入数据缓存,解决循环引用与大数据保存的问题 ☑ 1.3 版发布,它使用了全新的选择符引擎Sizzle,在各个浏览器下全面超越其他同类型JavaScript框架的查询速度,程序库的性能也因此有了极大提升 ☑ 1.5 版发布,新增延缓对像(Deferred Objects),并用deferred重写了Ajax模块 ☑ 1.7 版发布,抽象出回调对象,提供了强大的的方式来管理回调函数列表。 每一次大的改进都引入了一些新的机制、新的特性,通过这些新的机制就造就了如今jQuery库,一共13个模块,模块不是单一的,比如jQuery动画,都会依赖异步队列、动画队列、回调队列与数据缓存模块等。 jQuery抽出了所有可复用的特性,分离出单一模块,通过组合的用法,不管在设计思路与实现手法上jQuery都是非常高明的。 五大块: jQuery按我的理解分为五大块,选择器、DOM操作、事件、AJAX与动画,那么为什么有13个模块?因为jQuery的设计中最喜欢的做的一件事,就是抽出共同的特性使之“模块化”,当然也是更贴近S.O.L.I.D五大原则的“单一职责SRP”了,遵守单一职责的好处是可以让我们很容易地来维护这个对象,比如,当一个对象封装了很多职责的时候,一旦一个职责需要修改,势必会影响该对象的其它职责代码。通过解耦可以让每个职责更加有弹性地变化。 我们来看看jQuery文档针对业务层的Ajax的处理提供了一系列的门面接口: .ajaxComplete() .ajaxError() .ajaxSend() .ajaxStart() .ajaxStop() .ajaxSuccess() 底层接口: jQuery.ajax() jQuery.ajaxSetup() --->1
    查看全部
    0 采集 收起 来源:jQuery整体架构

    2018-03-22

  • 所以理解回调函数最重要的2点: 1、一个回调函数作为参数传递给另一个函数是,我们仅仅传递了函数定义。我们并没有在参数中执行函数。我们并不传递像我们平时执行函数一样带有一对执行小括号()的函数 2、回调函数并不会马上被执行,它会在包含它的函数内的某个特定时间点被“回调”。
    查看全部
    0 采集 收起 来源:理解回调函数

    2015-05-15

举报

0/150
提交
取消
课程须知
源码的阅读不是一蹴而就的,需要大家有一定的功底,比如jQuery的基础运用以及API的熟悉度,除此之外要有牢固的javascript、DOM、CSS的基础功底,甚至还需要理解常见的设计模式、数据结构等等。当然大家也不要被这些给吓住了,理解,总是需要一种慢慢的学习过程。
老师告诉你能学到什么?
通过本课程的学习,您可以由浅入深地剖析jQuery库的设计与实现。 其中我们围绕的重心: 1、设计理念 2、结构组织 3、接口设计 4、模式运用 5、场景套用

微信扫码,参与3人拼团

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

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