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 相关文章推荐
JQueryEasyUI Layout布局框架的使用
Apr 08 Javascript
Jquery动态进行图片缩略的原理及实现
Aug 13 Javascript
JSP跨iframe如何传递参数实现代码
Sep 21 Javascript
javascript中数组的冒泡排序使用示例
Dec 18 Javascript
JS实现统计复选框选中个数并提示确定与取消的方法
Jul 01 Javascript
详解JavaScript for循环中发送AJAX请求问题
Jun 23 Javascript
深入解析JavaScript中的立即执行函数
May 21 Javascript
Angular 路由route实例代码
Jul 12 Javascript
js闭包用法实例详解
Dec 13 Javascript
使用jQuery,Angular实现登录界面验证码详解
Apr 27 jQuery
vue 组件 全局注册和局部注册的实现
Feb 28 Javascript
vue修改Element的el-table样式的4种方法
Sep 17 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+ajax 无刷新删除数据
2010/02/20 PHP
destoon后台网站设置变成空白的解决方法
2014/06/21 PHP
分享3个php获取日历的函数
2015/09/25 PHP
JS日历 推荐
2006/12/03 Javascript
用ASP将SQL搜索出来的内容导出为TXT的代码
2007/07/27 Javascript
JavaScript Array Flatten 与递归使用介绍
2011/10/30 Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
2012/10/11 Javascript
jquery全选/全不选/反选另一种实现方法(配合原生js)
2013/04/07 Javascript
js取消单选按钮选中并判断对象是否为空
2013/11/14 Javascript
Bootstrap每天必学之js插件
2015/11/30 Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
2016/03/08 Javascript
JS实现元素上下左右移动效果
2017/10/18 Javascript
本地搭建微信小程序服务器的实现方法
2017/10/27 Javascript
浅谈vue-cli 3.0.x 初体验
2018/04/11 Javascript
vue-cli 构建骨架屏的方法示例
2018/11/08 Javascript
vue 实现搜索的结果页面支持全选与取消全选功能
2019/05/10 Javascript
Flutter 超实用简单菜单弹出框 PopupMenuButton功能
2019/08/06 Javascript
vue路由 遍历生成复数router-link的例子
2019/10/30 Javascript
如何使用webpack打包一个库library的方法步骤
2019/12/18 Javascript
vue style width a href动态拼接问题的解决
2020/08/07 Javascript
[45:59]EG vs OG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
flask框架中勾子函数的使用详解
2018/08/01 Python
在Django中URL正则表达式匹配的方法
2018/12/20 Python
Python常用库大全及简要说明
2020/01/17 Python
PyCharm最新激活码(2020/10/27全网最新)
2020/10/27 Python
纯CSS3实现8组超炫酷鼠标滑过图片动画
2016/03/16 HTML / CSS
Oracle里面常用的数据字典有哪些
2014/02/14 面试题
优秀学生干部个人的自我评价
2013/10/04 职场文书
函授药学自我鉴定
2014/02/07 职场文书
《青蛙看海》教学反思
2014/04/23 职场文书
4s店销售经理岗位职责
2014/07/19 职场文书
公务员中国梦演讲稿
2014/08/19 职场文书
转让协议书
2015/01/27 职场文书
个人学习总结范文
2015/02/15 职场文书
高中家长意见怎么写
2015/06/03 职场文书