jQuery extend()和jQuery.fn.extend()

jQuery提供两个用于封装扩展的方法:

1.$.extend(); 扩展jQuery类方法,即jQuery全局方法 (在全局可直接调用,如$.myFun(); myFun为自定义的方法)

2.$.fn.extend();扩展jQuery实例的成员方法 (如用来扩展一个input框的方法,$.fn = $.prototype,原型)

认识$.extend

$.extend 用法:jQuery.extend( target [, object1 ] [, objectN ] )

它的含义是将object1,object2,object3...合并到target中,生成新的target并返回

如果只想获取到object1,object2,object3...合并后的集合,那么target直接给一个空的对象即可

如:$.extend({},object1,object2,object3...)

使用技巧:

1.如果合并的集合中存在重复的参数名称,那么后面的会覆盖前面的

var obj1 = {
name : 'Mary',
age : '18'
}; var obj2 = {
name : 'Lily',
sex : 'Female'
}; var newObj = $.extend({},obj1,obj2); //newObj最终结果
{
name : 'Lily',
age : '18' ,
sex : 'Female'
}     

2.省略dest参数

extend方法中的target是可以省略的,如果省略了,则该方法就只能有一个object参数,而且是将该object合并到调用extend方法的对象中去。有点绕,上例子更明白些。

$.extend(src)

该方法就是将obj合并到jQuery的全局对象中去,如

$.extend({
hello:function(){
alert('hello!');
}
} //全局可调用
$.hello();  

3.重载原型

$.extend(boolean,target,obj1,obj2,obj3...)

与前面用法不同的是多了一个boolean参数,boolean 代表是否进行深度拷贝

例子:

var obj1 = {
name : 'John',
score : {
    math :'100',
   englisth':'99'
   }
}; var obj2 = {
  age : '18',
  score : {
    music : '66',
    history : '88'
  }
}; var result = $.extend(true,{},obj1,obj2); //boolean为true时result最终结果(深度拷贝)
result = {
name : 'John',
age : '18',
score : {
math : '100',
english : '99',
music : '66',
history : '88'
  }
} //boolean为false时result最终结果(非深度拷贝)
result = {
name : 'John',
age : '18',
score : {
music : '66',
history : '88'
}
}
//因为obj1,obj2都有score参数,所以obj2会覆盖掉前面obj1的score值

  

认识$.fn.extend

$.fn.extend 用法:$.fn.extend(object)

含义:把对象挂载到jQuery的prototype属性,来扩展一个新的jQuery实例方法,为jQuery实例添加"成员方法", jQuery实例可以直接使用该函数方法。

jQuery.fn.extend = jQuery.prototype.extend

你可以拓展一个对象到jQuery的prototype里去

(function( $ ){
$.fn.tooltip = function( options ) {
};
//等价于
var tooltip = {
function(options){
}
};
$.fn.extend(tooltip) = $.prototype.extend(tooltip) = $.fn.tooltip
})(jQuery);

  

$.extend() 与 $.fn.extend()两者的区别

1.两者调用方式不同:

jQuery.extend()      一般由传入的全局函数来调用,主要是用来拓展个全局函数,如$.init(),$.ajax();

jQuery.fn.extend()  一般由具体的实例对象来调用,可以用来拓展选择器,例如$.fn.each();

2.两者的主要功能作用不同:

jQuery.extend(object); 为扩展jQuery类本身,为自身添加新的方法。

jQuery.fn.extend(object);给jQuery实例对象添加方法

3.大部分插件都是用jQuery.fn.extend()

jQuery开发自定义插件 $.extend()与$.fn.extend()的更多相关文章

  1. [转]jquery开发自定义的插件总结

    本文转自:http://www.cnblogs.com/Jimmy009/archive/2013/01/17/jquery%E6%8F%92%E4%BB%B6.html 前几天在玩jquery,今天 ...

  2. jQuery中,$.extend,$obj.extend和$.fn.extend三者的区别

    jQuery中,$.extend,$obj.extend和$.fn.extend三者的区别 现在做的一个项目,所使用的框架是基于jQuery扩展的,于是平时学了一下jQuery,了解到了它的扩展函数: ...

  3. jQuery插件开发中$.extend和$.fn.extend辨析

    jQuery插件开发分为两种:   1 类级别 类级别你可以理解为拓展jquery类,最明显的例子是$.ajax(...),相当于静态方法. 开发扩展其方法时使用$.extend方法,即jQuery. ...

  4. $.fn与$.fx什么意思; $.extend与$.fn.extend用法区别; $(function(){})和(function(){})(jQuery)

    $.fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例每一个有效. 如扩展$.fn.abc() 那么你可以这样子:$("#div").abc(); 通常使 ...

  5. 理解jQuery的$.extend与$.fn.extend

    https://www.cnblogs.com/xuxiuyu/p/5989743.html 上面这篇博客总结的很棒!!,以下对自己的认识做一个总结 <!DOCTYPE html> < ...

  6. $.extend()和$.fn.extend()用法和区别

    $.extend()和$.fn.extend()用法和区别: 在自己制作插件的时候会经常用到$.extend()和$.fn.extend()两个函数,无论从外观还是作用都非常的类似,但是实际上它们的区 ...

  7. $.extend(),与$.fn.extend() 讲解

    $.extend(),与$.fn.extend() 讲解(一) (2013-07-11 10:24:31) 转载▼ 转自:http://blog.sina.com.cn/s/blog_a3bd3bd0 ...

  8. $.extend()与$.fn.extend()

    jQuery.extend(object) 扩展jQuery对象本身.用来在jQuery命名空间上增加新函数.jQuery.fn.extend(object) 扩展 jQuery 元素集来提供新的方法 ...

  9. jquery开发js插件

    1.需要掌握的知识点 1)(function($){...}(jQuery)):实际上就是匿名函数并且函数用()阔起来,形成闭包,外界对其内部函数没有影响 $(function(){…});   jQ ...

随机推荐

  1. 基于HTML5及WebGl下生成的json格式的工控SCADA风机叶轮旋转

    突然有个想法,如果能把一些用到不同的知识点放到同一个界面上,并且放到一个盒子里,这样我如果要看什么东西就可以很直接显示出来,而且这个盒子一定要能打开.我用HT实现了我的想法,代码一百多行,这么少的代码 ...

  2. winform中执行任务,解决未响应界面

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)        {            var coun ...

  3. Yii2之mailer的使用

     Mailer组件是yii框架自带的用于收发邮件的组件,无需安装,只需做一些配置即可使用,非常便捷.本文就mailer组件从配置到使用进行简单讲解.  首先在config/main.php配置如下: ...

  4. UWP Popup 弹出

    一:需求 做一个类似于安卓的弹出消息框,如图.当用户点击下载或者选择时,能够从底部弹出一个提示框,用于提示用户. 二:Popup 类 不需要我们自己额外去写一个弹窗类,微软自己有一个Popup 弹窗类 ...

  5. 进程,线程,GIL,Python多线程,生产者消费者模型都是什么鬼

    1. 操作系统基本知识,进程,线程 CPU是计算机的核心,承担了所有的计算任务: 操作系统是计算机的管理者,它负责任务的调度.资源的分配和管理,统领整个计算机硬件:那么操作系统是如何进行任务调度的呢? ...

  6. 纯js实现DIV拖拽

    写代码的时候遇到需要对绝对布局的div进行拖拽的功能,起初为了省事直接在网上扒拉了一番,看到大神张鑫旭的一篇文章<JavaScript实现最简单的拖拽效果>,便直接拿来使用(膜拜大神).但 ...

  7. Android的主线程和子线程

    在一个Android 程序开始运行的时候,会单独启动一个Process.默认的情况下,所有这个程序中的Activity或者Service(Service和 Activity只是Android提供的Co ...

  8. Java设计模式探讨之单例模式

    单例模式是在平时的项目开发中比较常见的一种设计模式,使用比较普遍,网上的资料也是一抓一大把,小Alan也来凑凑热闹,为以后充实点设计模式相关的内容做个简单的开篇. 单例模式是一种创建对象的模式,用于产 ...

  9. 1034: [ZJOI2008]泡泡堂BNB

    1034: [ZJOI2008]泡泡堂BNB Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3234  Solved: 1655[Submit][St ...

  10. 注销/etc/passwd带来的系统登陆不上

    今天在修改虚拟机密码上的时候,将/etc/passwd中root所在的哪行注销掉了,想象是注销了,root登陆时应该不要输入密码,结果是系统进度条走到最后的时候 进入不了系统了. 结果去普及了下/et ...