`

jQuery extend

阅读更多

这篇分析下它的extend方法。如下

1
2
3
jQuery.extend = jQuery.fn.extend = function() {
     ...
};

我们可以用$.extend去扩展自定义的对象,如

1
2
3
var myself = {name:jack};
$.extend(myself, {setName: function(n){this.name=n;} });
myself.setName("tom");

通过$.extend为对象myself添加了setName方法。但这里主要讨论$.extend如何构建jQuery库的。不知注意到上面代码中jQuery.extend和jQuery.fn.extend是同一个函数。我们浏览下jQuery库,发现有些方法是通过调用jQuery.extend扩展的,有些则是通过调用jQuery.fn.extend扩展的。

 

下面分别讨论:

1,通过jQuery.extend扩展 

我们知道jQuery.extend中的jQuery类型是function,即typeof jQuery值为字符串“function”。如果把jQuery当成一个类,jQuery.extend相当于为该类添加了静态方法extend。静态方法是不需要new一个实例再去调用的,通过“类名+方法名”直接调用。即jQuery.extend(...),jQuery又被赋值给$。因此我们更习惯$.extend(...)。
源码中直接调用jQuery.extend方法,只传一个参数。如下

1
2
3
4
5
6
7
8
9
jQuery.extend({
    noConflict: function( deep ) {
        window.$ = _$;
        if ( deep )
            window.jQuery = _jQuery;
        return jQuery;
    },
        ...
});


我们知道extend中如果只传一个参数,那么将执行该句

1
2
3
4
if ( length === i ) {
    target = this;
    --i;
}

即扩展自己,而这里的this则是function jQuery。也就是说给function jQuery添加了许多静态方法,这些方法都可以直接通过jQuery.xx(或$.xx)方式来调用,而不是先执行(调用)jQuery方法再去调用xx,如$("#id").xx。也许下面这个例子更容易理解 

1
2
3
4
5
6
7
8
9
10
11
12
13
function fun(){}//定义一个类(函数)
 
//为该类(函数)添加一个静态方法extend
fun.extend=function(obj){
    for(var a in obj)
        this[a] = obj[a];//注意:这里的tihs即fun
}
 
//调用extend为该类添加了静态属性name,静态方法method1
fun.extend({name:"fun",method1:function(){}});
 
//输出name,prototype,extend,method1
console.dir(fun)

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

 

2,通过jQuery.fn.extend扩展 

jQuery.fn等于jQuery.prototype,也就是说给function jQuery的原型(prototype)上挂了个extend方法。通过调用jQuery.fn.extend(object)来扩展时(注意只传一个参数object),extend函数中仍然会执行

1
2
3
4
if ( length === i ) {
    target = this;
    --i;
}

而这时的this则是jQuery.prototype(第一条提到的则是jQuery函数自身)。即给jQuery.prototype上添加了许多属性,方法。当jQuery函数执行时,如$()或jQuery(),更多时候是$()。该函数会new一个jQuery(见上一篇jQuery对象的组成)。这时则把扩展的属性,方法都附加到new生成的对象上了。也许下面这个示例更容易理解

1
2
3
4
5
6
7
8
9
10
11
12
13
function fun(){}//定义一个类(函数)
 
//给该类原型上添加一个方法extned
fun.prototype.extend = function(obj){
    for(var a in obj)
        this[a] = obj[a];//注意:这里的this即是fun.prototype
}          
 
//调用extend方法给fun.prototype上添加属性,方法
fun.prototype.extend({name:"fun2",method1:function(){}})
 
//输出name,extend,method1
console.dir(new fun())

因此扩展的属性或方法都添加到jQuery对象上了。如bind, one, unbind等可以通过$("...").bind, $("...").one, $("...").unbind方式调用。却不能通过 $.bind, $.one, $.unbind方式调用。


jQuery与Prototype一样都是通过extend方法扩展出整个库的。相对来说jQuery的扩展方式更难理解一些。

总结如下:

  1. jQuery.extend({...})是给function jQuery添加静态属性或方法
  2. jQuery().extend({...})是给jQuery对象添加属性或方法
分享到:
评论

相关推荐

    jQuery.extend 函数详解

    ### jQuery.extend 函数详解 #### 一、概述 在JavaScript前端开发中,jQuery是一个非常流行的库,它简化了许多常见的操作,比如DOM操作、事件处理、AJAX交互等。`jQuery.extend`是jQuery提供的一个用于扩展jQuery...

    原生js实现jquery $.extend方法

    原生js实现jquery $.extend方法 通过遍历对象属性来实现

    jQuery extend()详解及简单实例

    jQuery extend()详解及简单实例 使用jQuery的时候会发现,jQuery中有的函数是这样使用的: $.get(); $.post(); $.getJSON(); 有些函数是这样使用的: $('div').css(); $('ul').find('li'); 有些函数是这样使用...

    jQuery.extend

    **jQuery.extend** jQuery.extend是jQuery库中的一个非常重要的方法,用于合并两个或更多的对象属性到一个目标对象中。这个功能在开发过程中非常实用,尤其是在处理配置选项、扩展插件功能或者进行对象拷贝时。本篇...

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

    在jQuery的API中,`jQuery.extend`和`jQuery.fn.extend`是两个重要的方法,它们用于合并对象属性,但作用范围和用途有所不同。本文将深入探讨这两个方法的差异,并通过实例解析它们的工作原理。 首先,`jQuery....

    jQuery extend 的简单实例

    jQuery.extend是jQuery库中一个非常实用的功能,它主要被用来合并一个或多个对象的内容到目标对象中。该方法在处理类似对象合并、复制、扩展功能时尤为方便。接下来,我会详细阐述jQuery.extend方法的工作原理以及...

    jQuery.extend()、jQuery.fn.extend()扩展方法示例详解

    jQuery自定义了jQuery.extend()和jQuery.fn.extend()方法.其中jQuery.extend()方法能够创建全局函数或者选择器,而jQuery.fn.extend()方法能够创建jQuery对象方法. 例如: 代码如下: jQuery.extend({ showName : ...

    jQuery中extend()和fn.extend()方法详解

    jQuery中的`extend()`和`fn.extend()`方法是用于合并对象属性和方法的工具,它们在扩展和定制jQuery功能时起着关键作用。 首先,`jQuery.extend()`方法允许开发者将一个或多个对象的属性和方法合并到一个现有对象上...

    jQuery中extend函数详解

    1.$.extend({},defaults, options) 这样做的目的是为了保护包默认参数。也就是defaults里面的参数。 做法是将一个新的空对象({})做为$.extend的第一个参数,defaults和用户传递的参数对象紧随其后,这样做的好处是...

    jQuery:jQuery.extend函数详解

    ### jQuery.extend函数详解 #### 一、概述 `jQuery.extend`是jQuery库中一个非常实用且功能强大的函数,主要用于合并两个或多个对象的属性至一个新的对象中。这使得开发人员能够在编写插件或其他代码时方便地扩展...

    jQuery的extend方法【三种】

    jQuery的`extend`方法是其库中非常关键的一部分,它提供了合并对象、扩展功能和实现继承的能力。在面试中,熟悉`extend`的用法对于理解jQuery的核心机制至关重要。接下来,我们将深入探讨`extend`的三种主要用法。 ...

    详解jQuery插件开发中的extend方法

    Jquery的扩展方法extend是我们在写插件的过程中常用的方法,该方法有一些重载原型,dest是要整合的空间可以使{} 或者不写 src是一个JSON表达式表示的javascript对象…. 因此里面可以添加方法属性等等… 我么通过不同...

    jquery $.fn.extend

    `$.fn.extend`是jQuery库中的一个核心方法,主要用于扩展jQuery对象的方法集合。这个方法允许开发者自定义jQuery的函数,从而实现对DOM元素的操作或添加新的功能。在jQuery中,`$.fn`实际上是`$.prototype`的一个...

    jquery.validate.extend.js

    jquery.validate.extend.js

    jQueryExtendDemo

    《jQuery Extend 深入解析与实战应用》 在JavaScript的世界里,jQuery库以其简洁的API和强大的功能深受开发者喜爱。其中,`jQuery.extend()`是一个非常实用且关键的方法,它用于合并两个或更多的对象属性,并将结果...

    浅谈jquery.fn.extend与jquery.extend区别

    1.jquery.extend(object); 为扩展jQuery类本身.为类添加新的方法。 jquery.fn.extend(object);给jQuery对象添加方法。 $.extend({  add:function(a,b){return a+b;} }); //$.add(3,4); //return 7 jQuery添加...

Global site tag (gtag.js) - Google Analytics