jQuery.fn和jQuery.prototype区别介绍


Posted in Javascript onOctober 05, 2013

近期在读jQuery的源码。

发现这里有个东西很难理解。

这里的 jQuery , jQuery.fn , jQuery,fn,init ,jQuery,prototype 都代表什么。

来看下jQuery的源码是怎么样定义的:

(function( window, undefined ) { var jQuery = (function() { 
// 构建jQuery对象 
var jQuery = function( selector, context ) { 
return new jQuery.fn.init( selector, context, rootjQuery ); 
} 
// jQuery对象原型 
jQuery.fn = jQuery.prototype = { 
constructor: jQuery, 
init: function( selector, context, rootjQuery ) { 
// something to do 
} 
}; 
// Give the init function the jQuery prototype for later instantiation 
jQuery.fn.init.prototype = jQuery.fn; 
// 合并内容到第一个参数中,后续大部分功能都通过该函数扩展 
// 通过jQuery.fn.extend扩展的函数,大部分都会调用通过jQuery.extend扩展的同名函数 
jQuery.extend = jQuery.fn.extend = function() {}; 
// 在jQuery上扩展静态方法 
jQuery.extend({ 
// something to do 
}); 
// 到这里,jQuery对象构造完成,后边的代码都是对jQuery或jQuery对象的扩展 
return jQuery; 
})(); 
window.jQuery = window.$ = jQuery; 
})(window);

这里我们可以看到:
var jQuery = function( selector, context ) { 
return new jQuery.fn.init( selector, context, rootjQuery ); 
}

jQuery 其实jQuery.fn.init()返回一个对象。那么jquery.fn.init()返回的又是什么呢?
jQuery.fn = jQuery.prototype = { 
constructor: jQuery, 
init: function( selector, context, rootjQuery ) { 
// something to do 
} 
};

就是从这里来的,一个javascript对象。

这里有个问题。

jQuery.fn = jQuery.prototype

那么就是 将jQuery 的原型对象赋值给了 jQuery.fn。

再看下面:

jQuery.fn.init.prototype = jQuery.fn;

看到这里我有一个想法。就是 将jQuery.fn 给了 jQuery.fn.init.prototype.

那么在这之前jQuery.fn.init.prototype.是什么?

是不是没有?这个时候它的原型是{};

那么为了可以去调用init外面的方法。就做了一个处理。

将jQuery.fn 赋值给jQuery.fn.init.prototype.这样的话,

jQuery.fn.init.prototype的原型也就是jQuery的原型对象就是 jQuery.fn ( 注意jQuery = function(return new jQuery.fn.init()))。

赋值了以后。在调用的时候,当init中没有方法的时候,就会去原型函数中调用。

那么这样的话。

你可能会想到这样一个东东:

jQuery.extends() 
jQuery.fn.extends()

我想你应该明白它们的区别了吧。

jQuery.extends()是直接扩展jQuery.而jQuery.fn.extends(),很明显是扩展的原型。

这就是为什么jQuery.fn.extends()中的大部分方法来自己于jQuery.extends()。

这里又将 jQuery.fn 赋值给了 jQuery.fn.init.prototype.

那么就有这样的一个关系:

jQuery.prototype = jQuery.fn = jQuery.fn.init.prototype
Javascript 相关文章推荐
弹出广告特效(一个IP只弹出一次)的代码
Jul 27 Javascript
摘自启点的main.js
Apr 20 Javascript
在jQuery ajax中按钮button和submit的区别分析
Oct 07 Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
Oct 11 Javascript
Bootstrap每天必学之下拉菜单
Nov 25 Javascript
bootstrap table 数据表格行内修改的实现代码
Feb 13 Javascript
js清除浏览器缓存的几种方法
Mar 15 Javascript
WEEX环境搭建与入门详解
Oct 16 Javascript
p5.js临摹旋转爱心
Oct 23 Javascript
node.js中npm包管理工具用法分析
Feb 14 Javascript
浅析JS中NEW的实现原理及重写
Feb 20 Javascript
微信小程序实现多图上传
Jun 19 Javascript
javascript 函数声明与函数表达式的区别介绍
Oct 05 #Javascript
javascript自启动函数的问题探讨
Oct 05 #Javascript
纯js简单日历实现代码
Oct 05 #Javascript
JS教程:window.location使用方法的区别介绍
Oct 04 #Javascript
js中单引号与双引号冲突问题解决方法
Oct 04 #Javascript
jquery parent和parents的区别分析
Oct 02 #Javascript
jQuery插件 selectToSelect使用方法
Oct 02 #Javascript
You might like
php截取字符串并保留完整xml标签的函数代码
2013/02/06 PHP
PHP实现查询两个数组中不同元素的方法
2016/02/23 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
2018/03/31 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
基于jquery的修改当前TAB显示标题的代码
2010/12/11 Javascript
最新的10款jQuery内容滑块插件分享
2011/09/18 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
2015/03/02 Javascript
在javascript中创建对象的各种模式解析
2016/05/16 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
简单谈谈Javascript函数中的arguments
2017/02/09 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
2018/05/22 Javascript
vue学习笔记之给组件绑定原生事件操作示例
2020/02/27 Javascript
解决vue动态路由异步加载import组件,加载不到module的问题
2020/07/26 Javascript
工作中常用js功能汇总
2020/11/07 Javascript
Python上传package到Pypi(代码简单)
2016/02/06 Python
Collatz 序列、逗号代码、字符图网格实例
2017/06/22 Python
基于python的Tkinter编写登陆注册界面
2017/06/30 Python
对Python3 解析html的几种操作方式小结
2019/02/16 Python
python flask框架实现重定向功能示例
2019/07/02 Python
Python跳出多重循环的方法示例
2019/07/03 Python
Python实现bilibili时间长度查询的示例代码
2020/01/14 Python
Python中无限循环需要什么条件
2020/05/27 Python
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
《草原的早晨》教学反思
2014/04/08 职场文书
领导干部群众路线剖析材料
2014/10/09 职场文书
狮子林导游词
2015/02/03 职场文书
工作态度检讨书范文
2015/05/06 职场文书
2015年创先争优工作总结
2015/05/23 职场文书
新闻稿件写作范文
2015/07/18 职场文书
文明和谐家庭事迹材料(2016精选版)
2016/02/29 职场文书
win11系统中dhcp服务异常什么意思? Win11 DHCP服务异常修复方法
2022/04/08 数码科技
vue动态绑定style样式
2022/04/20 Vue.js
win10电脑关机快捷键是哪个 win10快速关机的几种方法
2022/08/14 数码科技