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 相关文章推荐
JQUERY CHECKBOX全选,取消全选,反选方法三
Aug 30 Javascript
javascript修改表格背景色实例代码分享
Dec 10 Javascript
LABjs、RequireJS、SeaJS的区别
Mar 04 Javascript
探讨js字符串数组拼接的性能问题
Oct 11 Javascript
JS获得选取checkbox整行数据的方法
Jan 28 Javascript
轻松实现javascript图片轮播特效
Jan 13 Javascript
Javascript基础知识盲点总结之函数
May 15 Javascript
JavaScript中transform实现数字翻页效果
Mar 08 Javascript
vue中的非父子间的通讯问题简单的实例代码
Jul 19 Javascript
详解关于element el-button使用$attrs的一个注意要点
Nov 09 Javascript
微信小程序实现点击卡片 翻转效果
Sep 04 Javascript
Vue3为什么这么快
Sep 23 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
WINDOWS服务器安装多套PHP的另类解决方案
2006/10/09 PHP
php截取html字符串及自动补全html标签的方法
2015/01/15 PHP
PHP异常处理Exception类
2015/12/11 PHP
thinkPHP中钩子的两种配置调用方法详解
2016/11/11 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
thinkPHP5实现数据库添加内容的方法
2017/10/25 PHP
PHP常用函数之base64图片上传功能详解
2019/10/21 PHP
jquery 笔记 事件
2011/11/02 Javascript
jQuery 1.8 Release版本发布了
2012/08/14 Javascript
js判断选择的时间是否大于今天的代码
2013/08/20 Javascript
JQuery EasyUI 数字格式化处理示例
2014/05/05 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
2016/07/26 Javascript
jQuery轮播图效果精简版完整示例
2016/09/04 Javascript
Javascript 实现匿名递归的实例代码
2017/05/25 Javascript
微信小程序scroll-view实现滚动穿透和阻止滚动的方法
2018/08/20 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
jQuery实现的别踩白块小游戏完整示例
2019/01/07 jQuery
微信内置开发 iOS修改键盘换行为搜索的解决方案
2019/11/06 Javascript
[02:30]联想杯DOTA2完美世界全国高校联赛—北京站现场
2015/11/16 DOTA
[01:07:34]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第二场 1月9日
2021/03/11 DOTA
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
如何使用django的MTV开发模式返回一个网页
2019/07/22 Python
python安装dlib库报错问题及解决方法
2020/03/16 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
2020/04/08 Python
使用Python FastAPI构建Web服务的实现
2020/06/08 Python
HTML5拖拽API经典实例详解
2018/04/20 HTML / CSS
海信商城:海信电视、科龙空调、容声冰箱官方专卖
2017/02/07 全球购物
体育学院毕业生自荐信
2013/11/03 职场文书
采购部长岗位职责
2014/06/13 职场文书
学院党的群众路线教育实践活动第一阶段情况汇报
2014/10/25 职场文书
2014年节能减排工作总结
2014/12/06 职场文书
毕业感言怎么写
2015/07/31 职场文书
导游词之南京莫愁湖公园
2019/11/13 职场文书
PHP中->和=>的意思
2021/03/31 PHP
js实现模拟购物商城案例
2021/05/18 Javascript
Python深度学习之实现卷积神经网络
2021/06/05 Python