`

jQuery对象包含的内容及两种扩展方式

 
阅读更多
jQuery对象包含的内容及两种扩展方式
标识符jQuery,我们可以理解其为一个function,
var jQuery = function( selector, context ) { 
        // The jQuery object is actually just the init constructor 'enhanced' 
        return new jQuery.fn.init( selector, context, rootjQuery ); 
    }

而jQuery的fn,我们理解其为prototype,因为jQuery.fn = jQuery.prototype =
{ 
    constructor: jQuery, 
    init: function(selector, context, rootjQuery){ 
    } 
} 


还要注意一句话jQuery.fn.init.prototype = jQuery.fn。该句把function jQuery的原型赋值给了function init的原型。
当调用$("#id")时返回的对象组成包括两个部分,由function init中this带的(如this.context);由function jQuery的prototype带的(如this.size/this.toArray);

jQuery对象由以下部分组成:
1,挂在jQuery.prototype.init中的this上的属性或方法。
2,挂在jQuery.prototype.init.prototype上的属性或方法。
3,因为把jQuery.prototype赋值给了jQuery.prototype.init.prototype,所以挂在jQuery.prototype上的属性和方法也是jQuery对象的一部分。
4,通过jQuery.fn.extend({...})方式扩展的属性或方法




jQuery.extend扩展和jQuery.fn.extend扩展的区别

首先注意到
jQuery.extend = jQuery.fn.extend = function() { 
     ... 
}; 
也就是这两种方式的源代码都是相同的,但是他们的主要区别在哪里呢?
if ( length === i ) { 
    target = this; 
    --i; 
} 

注意这一段代码,length代表extend中的参数个数,i初始化为1,如果extend中只有一个参数的话,那么this就赋值给target。
1如果是jQuery.extend 那么this就为function jQuery,也就是说给function jQuery添加了许多静态方法。些方法都可以直接通过jQuery.xx(或$.xx)方式来调用,而不是先执行(调用)jQuery方法再去调用xx,如$("#id").xx。

因此,jQuery中的isFunction, isArray, isWindow等都是静态方法,只能通过$.isFunction, $.isArray, $.Window引用。而不能通过$("...").isFuction, $("...").isArray, $("...").isWindow方式引用。



2.如果是jQuery.fn.extend那么this就为jQuery.protoype ,因为fn为prototype,也就是给jQuery.prototype上添加了许多属性,方法。当jQuery函数执行时,如$()或jQuery(),更多时候是$()。这时则把扩展的属性,方法都附加到new生成的对象上了。(注意prototype的属性就是等到new时,才会原型的所有属性立即赋予要创建的对象上)
因此扩展的属性或方法都添加到jQuery对象上了。如bind, one, unbind等可以通过$("...").bind, $("...").one, $("...").unbind方式调用。却不能通过 $.bind, $.one, $.unbind方式调用。
分享到:
评论

相关推荐

    jQuery权威指南-源代码

    《jQuery权威指南》除了理论知识丰富而全面外,它还有一个最大的特点就是注重实战,每个知识点都有一个完整的案例,包括需求分析、代码实现和结果展示三个部分,而且还包含两个综合性的案例,它的实践性之强是目前...

    jQuery插件开发全解析

    jQuery插件的开发包括两种:一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法。jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级别的插件开发,即给jQuery对象添加...

    jquery插件使用方法大全

    没错,上面两行代码已经分别实现了一个id为Msg的jquery对象的渐入和淡出。做一个像Gmail一样的动态加载通知条,用jquery就那么简单。两个函数接受的参数除了快慢等,还可以接收整型,作为渐入或淡出的完成时间,...

    jQuery中map函数的两种方式

    两种方式: 1、直接jQuery.map //将原数组中每个元素加 4 转换为一个新数组。 $.map( [0,1,2], function(n){ return n + 4; }); //结果: [4, 5, 6] //原数组中每个元素扩展为一个包含其本身和其值加 1 的数组,并...

    jquery 资料合集 实例

    .net 企业库 三层架构 jquery 资料合集 实例  jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多javascript...如果要加入ORM的元素,那么就会包括对象和数据表之间的mapping,以及对象实体的持久化。

    jQuery完全实例.rar

    elements (Element, Array) : 用于封装成jQuery对象的DOM元素 示例 设置页面背景色。 jQuery 代码: $(document.body).css( "background", "black" ); -------------------------------------------------------...

    jQuery formValidator 表单校验插件 4.1.0

    插件支持5种大的校验方式,分别是:inputValidator(针对input、textarea、select控件的字符长度、值范围、选择个数的控制)、compareva lidator(提供2个对象的比较,目前可以比较字符串和数值型)、ajaxValidator...

    python入门到高级全栈工程师培训 第3期 附课件代码

    02 什么是异常处理及异常处理的两种方式对比 03 多分支与万能异常 04 异常处理的其他内容 05 什么时候用异常处理 06 什么是socket 07 套接字发展及分类 08 基于tcp协议的套接字编程 09 socket底层工作原理解释 10 ...

    xml-plus:Chrome扩展程序以显示XML文件

    可以使用querySelectorAll和jQuery两种CSS选择器。 RegEx是唯一不区分大小写的案例。 针对大型XML文件(> 1MB)进行了高度优化。 独立版本-由于避免了Chrome缓慢的加载过程,因此速度极快。 全局x变量( window...

    js-search:JS Search是一个高效的客户端搜索库,用于JavaScript和JSON对象

    此后,它已扩展到包括丰富的功能集-支持词干,停用词和TF-IDF排名。 以下是一些JS Perf基准测试,用于比较这两个搜索库。 (感谢调整了Lunr方面,以便进行更好的比较!)如果您正在寻找一种更简单,经过Web-worker...

    JAVA上百实例源码以及开源项目源代码

    消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener 在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被...

    xheditor-1.1.14

    xhEditor提供两种方式初始化编辑器: 方法1:利用class属性来初始化和传递各种初始化参数,例: class="xheditor {skin:'default'}" 方法2:利用xhEditor提供的jQuery插件接口来实现对特定textarea的初始化和传递...

    《iPhone开发实战》.(Christopher Allen).pdf

     本书全面探讨了 iphone平台的两种编程方式 ——web开发和 sdk编程。全书结合示例对这两种编程方式的基本流程、基本原理和基本原则给出了详细而通俗的讲解。在 web开发方面,分别介绍了三个 iphone web库,即 ...

    javapms门户网站源码

    点击“模板选择”,可以设置该栏目的栏目页显示模板、勾选栏目对应的内容模型及模型对应的模板,如下图所示 点击“浏览”按钮将会弹出模板选择层,模板是按分类进行树形显示,点击末级节点,右侧将会出现改分类...

    大名鼎鼎SWFUpload- Flash+JS 上传

     在SWFUpload的使用过程中,无论在客户端还是服务器端都要和File Object打交道,在一个File Object中包含了以下内容:  {  id : string, // SWFUpload file id, used for starting or cancelling and upload  ...

    JAVA上百实例源码以及开源项目

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    java开源包1

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包11

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

Global site tag (gtag.js) - Google Analytics