深入理解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 相关文章推荐
Javascript中暂停功能的实现代码
Mar 04 Javascript
javascript中巧用“闭包”实现程序的暂停执行功能
Apr 04 Javascript
js获取多个tagname的节点数组
Sep 22 Javascript
JSON字符串和对象之间的转换详解
May 26 Javascript
在Javascript中处理数组之toSource()方法的使用
Jun 09 Javascript
JS使用parseInt解析数字实现求和的方法
Aug 05 Javascript
使用Curl命令查看请求响应时间方法
Nov 04 Javascript
微信小程序 登录实例详解
Jan 16 Javascript
在 Angular中 使用 Lodash 的方法
Feb 11 Javascript
Vue 实例事件简单示例
Sep 19 Javascript
vue循环数组改变点击文字的颜色
Oct 14 Javascript
高性能js数组去重(12种方法,史上最全)
Dec 21 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实现数组按拼音顺序排序的方法
2017/05/03 PHP
jquery 1.3.2 IE8中的一点点的小问题解决方法
2009/07/10 Javascript
!DOCTYPE声明对JavaScript的影响分析
2010/04/12 Javascript
基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解
2013/05/07 Javascript
jQuery插件ajaxFileUpload实现异步上传文件效果
2015/04/14 Javascript
JavaScript中用toString()方法返回时间为字符串
2015/06/12 Javascript
jQuery Timelinr实现垂直水平时间轴插件(附源码下载)
2016/02/16 Javascript
VueJs路由跳转——vue-router的使用详解
2017/01/10 Javascript
JS中静态页面实现微信分享功能
2017/02/06 Javascript
微信小程序-form表单提交代码实例
2019/04/29 Javascript
Vue keepAlive 数据缓存工具实现返回上一个页面浏览的位置
2019/05/10 Javascript
WebPack工具运行原理及入门教程
2020/12/02 Javascript
使用Node.js和Socket.IO扩展Django的实时处理功能
2015/04/20 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
2017/07/22 Python
Python检测网络延迟的代码
2018/05/15 Python
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
itchat-python搭建微信机器人(附示例)
2019/06/11 Python
Python类中方法getitem和getattr详解
2019/08/30 Python
Python3离线安装Requests模块问题
2019/10/13 Python
python入门之基础语法学习笔记
2020/02/08 Python
详解Python 最短匹配模式
2020/07/29 Python
利用Python实现朋友圈中的九宫格图片效果
2020/09/03 Python
python破解同事的压缩包密码
2020/10/14 Python
Python基于Serializer实现字段验证及序列化
2020/11/04 Python
python爬取豆瓣电影排行榜(requests)的示例代码
2021/02/18 Python
python爬虫破解字体加密案例详解
2021/03/02 Python
维多利亚的秘密官方旗舰店:VICTORIA’S SECRET
2018/04/02 全球购物
JD Sports芬兰:英国领先的运动鞋和运动服饰零售商
2018/11/16 全球购物
十佳大学生村官事迹
2014/01/09 职场文书
《望洞庭》教学反思
2014/02/16 职场文书
高中英语演讲稿范文
2014/04/24 职场文书
英语三分钟演讲稿
2014/08/19 职场文书
党支部意见范文
2015/06/02 职场文书
2015大学党建带团建工作总结
2015/07/23 职场文书
Java设计模式之享元模式示例详解
2022/03/03 Java/Android
HTML页面中使两个div并排显示的实现
2022/05/15 HTML / CSS