版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、jQuery源码解读,背景,帮助大家理解jQuery的基本运作方式,使具备jQuery及相关插件源码的基本阅读能力。 以了解js基本语法和面向对象概念为前提编写。,2020/8/12,Ask For More渴望无限,2,Javascript面向对象,JQuery中大量用到了面向对象的概念,在学习jQuery源码之前,必须先了解javascript如何实现面向对象。,2020/8/12,Ask For More渴望无限,3,定义一个类,2020/8/12,Ask For More渴望无限,4,获得一个类的实例,2020/8/12,Ask For More渴望无限,5,匿名函数,2020/8/1
2、2,Ask For More渴望无限,6,无类型对象,2020/8/12,Ask For More渴望无限,7,引用对象的静态属性和方法,2020/8/12,Ask For More渴望无限,8,静态属性(方法)的动态添加、修改和删除,2020/8/12,Ask For More渴望无限,9, = ”jack”;,添加、修改属性,user.alert = function() alert(“my name is:” + ); , = undefined; user.alert = undefined;,删除属性和方法,添加、修改方法,pro
3、totype对象,2020/8/12,Ask For More渴望无限,10,function class1() / 定义object的实例方法。 totype.method = function() alert(method); var object1 = new class1(); object1.method(); / 覆盖class1对象的成员定义。 totype = prop : prop ; / 重新实例化对象才可使用prop属性。 object1 = new class1(); / 重新实例化的对象没有method方法。 / object1
4、.method(); alert(p);,prototype表示一个类的成员集合,当类被实例化时,当前prototype对象所有成员都将赋给该实例化对象,成为该对象的非静态属性或方法,且不受之后prototype对象变化的影响。,Function对象,2020/8/12,Ask For More渴望无限,11,function myFunction(a,b) return a+b; ,var myFunction = new Function(a,b,return a+b);,函数的本质是一个内部对象,function,alert(typeof(Function); al
5、ert(typeof(new Function(); alert(typeof(Array);,object,alert(typeof(new Array();,Function的隐含参数arguments,2020/8/12,Ask For More渴望无限,12,arguments对象存储了实际传递给函数的参数,它并不是一个数组对象,但是具有数组一样的访问性质,可以用argumentsindex这样的语法取值,拥有数组长度属性length。,arguments对象的另一个属性是callee,它表示对函数对象本身的引用,这有利于实现无名函数的递归或者保证函数的封装性。,var sum = f
6、unction(n) if(1=n) return 1; else return n+arguments.callee(n-1); alert(sum(100);,Function的apply、call方法和length属性,2020/8/12,Ask For More渴望无限,13,function func1(a, b, c) this.p=func1-; function func2() this.B=function(arg) alert(this.p+arg); var obj1=new func1(); var obj2=new func2(); /显示func1-byB obj2
7、.B.apply(obj1,byB); /显示func1-byB obj2.B.call(obj1,byB); /显示3 alert(func1.length);,apply和call的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数的方式有所区别: apply(thisArg,argArray); call(thisArg,arg1,arg2); 属性length表示函数定义时所指定参数的个数,而非调用时实际传递的参数个数。,this指针,2020/8/12,Ask For More渴望无限,14,var obj1 = new Object(); var obj2 = new Ob
8、ject(); obj1.p = 1; obj2.p = 2; obj1.getP = function() alert(this.p); obj1.getP(); / 显示1 obj2.getP = obj1.getP; obj2.getP(); / 显示2,this指针是一个动态变化的变量,它表明了当前运行该函数的对象。,new创建对象的过程,2020/8/12,Ask For More渴望无限,15,解释器遇到new操作符时创建一个空对象,并将函数的prototype对象的所有成员都赋给这个新对象。,将该对象作为this参数调用构造函数初始化这个对象,当给对象不存在的属性赋值时,解释器就
9、会为对象创建该属性,如执行this.p1=s时,就会添加一个属性 p1,并把变量 s 的值赋给它。,返回初始化后的对象,使用this指针添加类成员的缺点: 将所有的初始化语句、成员定义都放到一起,代码逻辑不够清晰,要实现复杂的功能时往往力不从心。 因为每创建一个类的实例,都要执行一次构造函数。所以实际上构造函数中定义的属性和方法总被重复的创建。,类的公有成员和私有成员,2020/8/12,Ask For More渴望无限,16,反射机制,2020/8/12,Ask For More渴望无限,17,反射机制指的是程序在运行时能够获取自身的信息。例如一个对象能够在运行时知道自己有哪些方法和属性。,
10、类的继承,2020/8/12,Ask For More渴望无限,18,抽象类,2020/8/12,Ask For More渴望无限,19,当在class1 的实例中调用继承得到的initialize方法时,就会自动执行派生类中的oninit()方法。,事件设计模式,2020/8/12,Ask For More渴望无限,20,function class1() totype= show:function() /. / 如果有事件绑定则循环onshow数组,触发该事件 if(this.onshow) for(var i=0;ithis.onshow.length;i+) thi
11、s.onshowi(); / 调用事件处理程序 , attachOnShow:function(_eHandler) / 用数组存储绑定的事件处理程序引用 if(!this.onshow)this.onshow=; this.onshow.push(_eHandler); var obj=new class1(); function onShow1() alert(1); / 事件处理程序1 function onShow2() alert(2); / 事件处理程序2 / 绑定两个事件处理程序 obj.attachOnShow(onShow1); obj.attachOnShow(onShow
12、2); obj.show(); / 触发onshow事件,事件机制可以使程序逻辑更加符合现实世界。通过事件机制,可以将类设计为独立的模块,通过事件对外通信,提高了程序的开发效率。,jQuery源码范例,通过由浅入深的简化版jQuery源码范例,了解jQuery是如何运作的。,2020/8/12,Ask For More渴望无限,21,范例一:创建jQuery对象,2020/8/12,Ask For More渴望无限,22,object HTMLInputElement,(function( window, undefined ) var jQuery = function( selector
13、) var length = selector.length; var id = selector.substring(1, length); this0 = document.getElementById( id ); return this; ; window.jQuery = window.$ = jQuery; )(window);,alert($(#input)0);,所有的$(params)对象都是jQuery对象。,范例二:扩展jQuery对象的方法,2020/8/12,Ask For More渴望无限,23,test,(function( window, undefined ) var jQuery = function( selector ) . ; jQtotype.val = function() return this0.value; ; window.jQuery = window.$ = jQuery; )(window);,alert(new $(#input).val();,为jQuery对象增加val方法。,范例三:隐式实例化jQuery对象,2020/8/12,Ask For More渴望无限,24,jQuery.fn = jQtotype 简化prototype为fn jQtot
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二年级上册语文古诗两首精讲|登鹳雀楼 望庐山瀑布
- 职业学校短期战略规划
- 秋冬换季健康指南
- 《数形结合思维训练|初中数学解题策略》
- 《趣味学阅读笔记|让课堂告别枯燥 爱上学习》
- 三年级数学上册面积初步课|面积单位
- 建筑工程公司总经理述职报告
- 公司揭牌仪式致辞14篇
- 护理随访试题及答案
- 2026福建福州福清市妇幼保健院招聘9人备考题库带答案详解(预热题)
- (2025版)月经性偏头痛诊断和治疗中国专家共识课件
- 高二英语(人教版)试题 选择性必修一 UNIT 1 课时检测(一)“Reading and Thinking”
- DG-TJ 08-2246-2023 绿色建筑工程验收标准
- 2025初中英语词汇3500词汇表
- 转业管理岗考试题及答案
- 2025比亚迪供应商审核自查表
- 2025年制冷技师考试题库
- 企业英语员工培训合同范例
- T-CACM 1355-2021 中医穴位贴敷基层临床应用技术操作规范
- 培训保安队长
- 物业投诉的处理技巧培训
评论
0/150
提交评论