在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. Oracle Database 11g Express Edition 使用小结(windows)

    如何启动oraclewindows系统服务中有一个服务叫:[OracleService[SID]]SID是你安装oracle xe时候的实例名,如果你没有改默认的是[XE], OracleServic ...

  2. 基于opencv的手写数字识别(MFC,HOG,SVM)

    参考了秋风细雨的文章:http://blog.csdn.net/candyforever/article/details/8564746 花了点时间编写出了程序,先看看效果吧. 识别效果大概都能正确. ...

  3. 浅谈“be practical and realistic”

    一 “实事求是”这个词,一般认为是古人的一种治学观念,后来经咏芝的发明.阐释.以及“应用”,成为“基本思想路线”(具体可参看大学思想政治教科书),被称为“活的灵魂”.这里不想过多地牵扯政治话题,仅就我 ...

  4. Mysql字符串截取函数SUBSTRING的用法说明

    感觉上MySQL的字符串函数截取字符,比用程序截取(如PHP或JAVA)来得强大,所以在这里做一个记录,希望对大家有用. 函数: 1.从左开始截取字符串 left(str, length) 说明:le ...

  5. 精美&创意的WordPress新发主题集合

    今天我整理了一些精美&创意的WordPress新发主题,它们基本上都融合了最新的设计理念,从简约到响应式,应有尽有. Engo – Smart & Minimal WordPress ...

  6. HW7.15

    public class Solution { public static void main(String[] args) { double[][] set1 = {{1, 1}, {2, 2}, ...

  7. angular的directive笔记

    原贴地址 1,tansclude: 是指令能够能够把外部定义的内容传回指令模板内部(通过在内部标签使用ng-transclude).这个外部指定的内容是根据外部的作用域控制的,跟指令的作用域无关.这个 ...

  8. Linux下的cut选取命令详解

    定义 正如其名,cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的.cut是以每一行为一个处理对象的,这种机制和sed是一样的 剪切依据 cut命令主要是接受三个定位方法: 第一,字节(by ...

  9. C++11静态assert

    [C++11静态assert] C++11新的关键字static_assert可以解决模板中的状态检察. 声明采取以下的形式: 这里有一些如何使用static_assert的例子: 当常数表达式值为f ...

  10. Qt实现应用程序单实例运行--LocalServer方式

    使Qt应用程序能够单实例运行的典型实现方法是使用共享内存实现.该方法实现简单,代码简洁. 但有一个致命缺陷:共享内存(QSharedMemory)实现的单程序运行,当运行环境是UNIX时,并且程序不幸 ...