在jquery中,extend其实在做插件时还是用的比较多的,今天同时小结jquery和ext js中 
的extend用法,先来看jquery中的。

1)  extend(dest,src1,src2,src3...);

  1. var start = {
  2. id: 123,
  3. count: 41,
  4. desc: 'this is information',
  5. title: 'Base Object',
  6. tag: 'uncategorized',
  7. values: [1,1,2,3,5,8,13]};
  8. var more = {    name: 'Los Techies',    tag: 'javascript'};
  9. var extra = {    count: 42,    title: null,    desc: undefined,    values: [1,3,6,10]};
  10. var extended = $.extend(start, more, extra);
  11. console.log(JSON.stringify(extended));

输出结果为: 
{    "id": 123,  
  "count": 42,   
"desc": "this is information",  
  "title": null, 
   "tag": "javascript",   
"values": [1, 3, 6, 10],   
"name": "Los Techies"}

可以看到,其实是

extend(dest,src1,src2,src3...);

,将src1,src2,src3...合并到dest中,返回值为合并后的dest,由此可以看出该方法合并后,是修改了dest的结构的。如果想要得到合并的结果却又不想修改dest的结构,可以如下使用:

var newSrc=$.extend({},src1,src2,src3...)//也就是将"{}"作为dest参数。 
比如: 
  var result=$.extend({},{name:"Tom",age:21},{name:"Jerry",sex:"Boy"})

那么合并后的结果

result={name:"Jerry",age:21,sex:"Boy"}

也就是说后面的参数如果和前面的参数存在相同的名称,那么后面的会覆盖前面的参数值。 
    同时要注意的是,在第一个例子中, "desc": undefined并不会出现在结果中, 
合拼的时候,依然保留了desc的原来的值。但title:null的话,会出现在extend的结果 
中。

2) 其他jquery extend的用法 
    1、$.extend(src) 
  该方法就是将src合并到jquery的全局对象中去,如:

$.extend({  hello:function(){alert('hello');}  });

  就是将hello方法合并到jquery的全局对象中。 
  2、$.fn.extend(src) 
  该方法将src合并到jquery的实例对象中去,如:

$.fn.extend({  hello:function(){alert('hello');} });

   就是将hello方法合并到jquery的实例对象中。

  下面例举几个常用的扩展实例:

$.extend({net:{}});

   这是在jquery全局对象中扩展一个net命名空间。

$.extend($.net,{   hello:function(){alert('hello');}  })

  这是将hello方法扩展到之前扩展的Jquery的net命名空间中去。

3 深度复制 
      // 以前的 .extend()   
   jQuery.extend(  false, 
     { name: “John”, location: { city: “Boston” } },   
     { last: “Resig”, location: { state: “MA” } }   
   );   
    // 结果:   
    // => { name: “John”, last: “Resig”, location: { state: “MA” } }

jQuery.extend( true,   
   { name: “John”, location: { city: “Boston” } },   
     { last: “Resig”, location: { state: “MA” } }   
  );   
  // 结果   
   // => { name: “John”, last: “Resig”,   
  //      location: { city: “Boston”, state: “MA” } }

3) 如果是ext js的话,看下有什么不同:

  1. var start = {
  2. id: 123,
  3. count: 41,
  4. desc: 'this is information',
  5. title: 'Base Object',
  6. tag: 'uncategorized',
  7. values: [1,1,2,3,5,8,13]};
  8. var more = {    name: 'Los Techies',    tag: 'javascript'};
  9. var extra = {    count: 42,    title: null,    desc: undefined,
  10. values: [1,3,6,10]};
  11. var extended = Ext.apply(start, more, extra);console.log(JSON.stringify(extended));

输出: 
   {    "id": 123,    "count": 42,    "title": null,    "tag": "javascript",    "values": [1,3,6,10],    "name": "Los Techies"}

可以看到,extjs中使用的是apply,而desc居然在合拼的结果中丢掉了,因为ext js认为undefind的东西不应该出现在合拼的结果中了,认为是擦除掉原来的值了,这个要注意

jquery,extjs中的extend用法小结的更多相关文章

  1. Delphi中ClientDataSet的用法小结

    Delphi中ClientDataSet的用法小结 TClientDataSet控件继承自TDataSet,其数据存储文件格式扩展名为 .cds,是基于文件型数据存储和操作的控件.该控件封装了对数据进 ...

  2. 详细解读-this-关键字在全局、函数、对象、jQuery等中的基础用法!

    一.前言 1. Javascript是一门基于对象的动态语言,也就是说,所有东西都是对象,一个很典型的例子就是函数也被视为普通的对象.Javascript可以通过一定的设计模式来实现面向对象的编程,其 ...

  3. JS与Jquery 中的extend用法不同

    1, Jquery //jQuery 应用扩展   jQuery.extend({                  // 定义setApDiv     setApDiv:function () {  ...

  4. jQuery学习笔记之extend方法小结

    在学习jQuery的时候,学习到了$.extend的主要用法,在此做一个简单的总结. (1)当只写一个对象自变量时,拓展的是jQuery的工具方法,如: $.extend({ aaa:function ...

  5. 实用ExtJS教程100例-006:ExtJS中Window的用法示例

    在前面几个示例中,我们演示了MessageBox的各种用法,今天这篇文章将演示如何使用Window. 我们首先来创建一个窗口: var win = Ext.create("Ext.windo ...

  6. C++中extern关键字用法小结

    总结C++中关于extern关键字的用法. 1.变量的生明和定义中 C++语言支持分离式编译机制,该机制允许将程序分割为若干个文件,每个文件可被独立编译.为了将程序分为许多文件,则需要在文件中共享代码 ...

  7. c#中enum的用法小结

    转自:http://blog.csdn.net/moxiaomomo/article/details/8056356 enums枚举是值类型,数据直接存储在栈中,而不是使用引用和真实数据的隔离方式来存 ...

  8. Mybatis配置映射文件中parameterType的用法小结

    原创: 在mybatis映射接口的配置中,有select,insert,update,delete等元素都提到了parameterType的用法,parameterType为输入参数,在配置的时候,配 ...

  9. 有关struts中DispatchAction的用法小结

       今天刚刚看了DispatchAction觉得这个东西有点意思,所以就写点东西,通过它的名字我想应该可以明白它的作用了,用于分发的Action,主要的好处是把一些功能类似的Action放到一个Ac ...

随机推荐

  1. JVM内存结构之三--持久代

    本文会介绍一些JVM内存结构的基本概念,然后很快会讲到持久代,来看下Java SE 8发布后它究竟到哪去了. 基础知识 JVM只不过是运行在你系统上的另一个进程而已,这一切的魔法始于一个java命令. ...

  2. Android 获取assets的绝对路径

    第一种方法:       String path = "file:///android_asset/文件名"; 第二种方法:    InputStream abpath = get ...

  3. Python函数练习:冒泡算法+快速排序(二分法)

    冒泡算法: #-*- coding: UTF-8 -*-#冒泡排序 def func(lt):if type(lt).__name__ !='list' and type(lt).__name__ ! ...

  4. 坑爹的gltools编译错误解决

    搭边手游,看opengl superbible, 书中代码需要一个gltools库.作者自己提供的code google地址里gltools项目是空的,此一坑. 他的网站(www.starstones ...

  5. ajax 模仿百度下拉

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  6. DD_belatedPNG,解决 IE6 不支持 PNG-24 绝佳解决方案

    png24在ie下支持透明.终于找到下面的可行办法: 我们知道 IE6 是不支持透明的 PNG-24 的,这无疑限制了网页设计的发挥空间. 然而整个互联网上解决这个 IE6 的透明 PNG-24 的方 ...

  7. mysql系统表加trigger和对特定的库禁用 DDL 语句

    给 mysql 系统表加上 trigger 1 Reply 默认情况下,mysql 是不能给系统表,例如 mysql.user 加上触发器的.会提示 ERROR 1465 (HY000): Trigg ...

  8. Office 365 plans, SharePoint Online, and SharePoint 2013 on-premises 功能对比列表

    Andrew ConnellSharePoint大牛整理了一个各个版本SharePoint功能对比列表,是SharePoint相关人员必备资料.赶紧收藏起来. SharePoint 2013 Feat ...

  9. Flex布局如何让子类在超出边界时隐藏掉

    在flex4中,因为必须添加<s:Scroller>标签才能出现滚动条,如果一个容器例如Panel没有添加滚动条,那么添加到Panel中的child的位置如果超出了Panel的边界,那么这 ...

  10. CSS3每日一练之内容处理-嵌套编号

    出处:http://www.w3cfuns.com/thread-5592229-1-17.html 1.大标题一   1.子标题   2.子标题   3.子标题2.大标题二   1.子标题   2. ...