深入理解jQuery()方法的构建原理


Posted in Javascript onDecember 05, 2016

前言

虽然JQuery相对简单,但要全面掌握,且快速灵活的使用它也并不那么容易,它提供了很多方法,包含了网页开发的各个知识面,所以要全面掌握这些知识点,个人认为还是需要对jquery有深入的理解,对这些知识点做分类整理记忆,这样你才能面对一些JQuery代码的时候不会感到迷惑,才会知道采用何种方式实现某个特效是最佳实践,才能快速的采用JQuery来进行项目开发。

jQuery中最常用方法的就是jQuery( ) ,也即$( )

jQuery( )是一个函数调用,调用的结果是返回了一个jQuery实例对象。

编写组件通常的做法是将组件封装成一个对象,需要用的时候则通过new运算符来创建一个实例。但是jQuery( )无须我们用new手工实例化,它会自动返回一个实例。

要实现这一点,最直接的思路就是定义这样一个函数:

深入理解jQuery()方法的构建原理

这么做的问题是出现了死循环:

深入理解jQuery()方法的构建原理

最简单的解决办法是借助另一个构造函数:

深入理解jQuery()方法的构建原理

这么做技术上并没有什么问题,但是jQuery的作者并没有这么做,可能是出于某种技术洁癖或者我暂时不清楚的原因,init被定义在了jQuery函数的原型中:

深入理解jQuery()方法的构建原理

通过init作为中转站,最终return出了一个jQuery实例。看上去更“雅致”,更有“技术范”。

将上述代码写在一个自执行函数内(形成私有作用域,避免命名空间污染),就构成了jQuery的核心框架(简化版):

深入理解jQuery()方法的构建原理

要理解上述结构的工作原理,必须理解JavaScript基于构造函数和原型的继承模式。

当函数调用表达式前出现了关键字new,这个函数就成了构造函数,此时会依次发生四件事:

     1、首先一个空对象(又称实例)被创建出来了。

     2、该空对象继承构造函数的原型中的属性和方法。这也是为什么要把方法都写在构造函数的prototype里。

     3、该空对象被赋值给构造函数内部的this对象。

     4、执行构造函数。如果构造函数中显式的返回了一个对象,那么new出的就不再是新创建的空对象,而是return指定的对象。否则一律返回新建空对象。

具体参见阮一峰教程:http://javascript.ruanyifeng.com/oop/basic.html

于是jQuery( )的构造原理就很清晰了:每次调用jQuery( )都返回由构造函数init指定返回的this对象,而this对象已经被赋值为那个新创建的空对象。由于把jQuery.prototype都赋给了init.prototype,所以新创建的空对象继承所有jQuery的方法。

构造函数init里面的return this其实删掉也无妨,至于作者为啥要加这句,呃,可能是因为知道的太多。

总结

以上就是jQuery()方法构建原理的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
JS中confirm,alert,prompt函数使用区别分析
Apr 01 Javascript
JQuery操作单选按钮以及复选按钮示例
Sep 23 Javascript
JavaScript获取网页中第一个链接ID的方法
Apr 03 Javascript
javascript实现简单查找与替换的方法
Jul 22 Javascript
全面解析Bootstrap表单使用方法(表单控件状态)
Nov 24 Javascript
js+html5操作sqlite数据库的方法
Feb 02 Javascript
纯JS代码实现气泡效果
May 04 Javascript
jQuery实现链接的title快速出现的方法
Feb 20 Javascript
js获取当前周、上一周、下一周日期
Mar 19 Javascript
vue input输入框模糊查询的示例代码
May 22 Javascript
vue 下列表侧滑操作实例代码详解
Jul 24 Javascript
JavaScript简单编程实例学习
Feb 14 Javascript
jQuery控制控件文本的长度的操作方法
Dec 05 #Javascript
浅析Ajax语法
Dec 05 #Javascript
jQuery的事件预绑定
Dec 05 #Javascript
微信小程序 UI布局常用技巧整理总结
Dec 05 #Javascript
深入理解vue.js双向绑定的实现原理
Dec 05 #Javascript
微信小程序 底部导航栏目开发资料
Dec 05 #Javascript
基于js实现的限制文本框只可以输入数字
Dec 05 #Javascript
You might like
php 获取mysql数据库信息代码
2009/03/12 PHP
利用Memcached在php下实现session机制 替换PHP的原生session支持
2010/08/21 PHP
PHP中的函数-- foreach()的用法详解
2013/06/24 PHP
解析在PHP中使用mysqli扩展库对mysql的操作
2013/07/03 PHP
php去除字符串中空字符的常用方法小结
2015/03/17 PHP
在php和MySql中计算时间差的方法详解
2015/03/27 PHP
php curl模拟post请求和提交多维数组的示例代码
2015/11/19 PHP
laravel框架学习笔记之组件化开发实现方法
2020/02/01 PHP
js兼容pc端浏览器并有多种弹出小提示的手机端浮层控件实例
2015/04/29 Javascript
php利用curl获取远程图片实现方法
2015/10/26 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
2015/12/04 Javascript
利用BootStrap的Carousel.js实现轮播图动画效果
2016/12/21 Javascript
基于vue实现分页效果
2017/11/06 Javascript
基于vue-simplemde实现图片拖拽、粘贴功能
2018/04/12 Javascript
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
JS使用对象的defineProperty进行变量监控操作示例
2019/02/02 Javascript
Vue 动态组件与 v-once 指令的实现
2019/02/12 Javascript
JavaScript实现星级评价效果
2019/05/17 Javascript
Python中的类学习笔记
2014/09/23 Python
python机器学习案例教程——K最近邻算法的实现
2017/12/28 Python
python的staticmethod与classmethod实现实例代码
2018/02/11 Python
python爬取m3u8连接的视频
2018/02/28 Python
详解Python requests 超时和重试的方法
2018/12/18 Python
python递归法实现简易连连看小游戏
2020/03/25 Python
django 单表操作实例详解
2019/07/30 Python
通过Python pyecharts输出保存图片代码实例
2020/11/25 Python
MSC邮轮官方网站:加勒比海、地中海和世界各地的假期
2018/08/27 全球购物
Brora官网:英国领先的羊绒服装品牌
2019/08/28 全球购物
Chemist Warehouse中文网:澳洲连锁大药房
2021/02/05 全球购物
本科毕业生专业自荐书范文
2014/02/05 职场文书
市场拓展计划书
2014/05/03 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
2015年支教教师工作总结
2015/07/22 职场文书
七年级上册生物的课件
2019/08/07 职场文书
导游词之太行山青龙峡
2020/01/14 职场文书
关于的python五子棋的算法
2022/05/02 Python