在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数据库中有关记录个数的查询

    一.查询表中全部的记录个数 可用两种方法,一种是在oracle的系统表中统计,另一种需要写存储过程统计,方法分别如下. 1.系统表中统计: SELECT sum(num_rows) FROM user ...

  2. A+B for Matrices 及 C++ transform的用法

    题目大意:给定两个矩阵,矩阵的最大大小是M*N(小于等于10),矩阵元素的值的绝对值小于等于100,求矩阵相加后全0的行以及列数. #include<iostream> using nam ...

  3. Linux系统上安装Python

    1.下载Python安装包,官网下:http://www.python.org/getit/ http://jingyan.baidu.com/article/eae07827f7f2d01fec54 ...

  4. 使用Ajax在javascript中调用后台C#函数

    使用Ajax在javascript中调用后台C#函数 最近一段时间在紧跟一个网站的项目,数据库中用户表的UserName要求是唯一的,所以当用户选定一个用户名进行注册时要首先检查该用户名是否已被占用, ...

  5. java PO、BO

    PO(persistent object) 持久对象 在o/r映射的时候出现的概念,如果没有o/r映射,那么这个概念也就不存在了.通常对应数据模型(数据库),本身还有部分业务逻辑的处理.可以看成是与数 ...

  6. sqoop 初用

    http://blog.csdn.net/dbanote/article/details/8907650 目前版本的Sqoop中,使用自由形式查询导入,只提供简单的查询,没有复杂的和“OR”条件查询在 ...

  7. 常用SQL整理

    整理了日常用到的一些sqls 1.插入表 insert into table_B select * from table_A 2.清空表 truncate table test #清空表,结构还存在d ...

  8. This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME 错误解决

    在一个Mysql表达式中使用嵌套查询,出现了这个错误.原因是内层select语句带有limit子句.   在网上查了下,有文章指出: 比如这样的语句是不能正确执行的. select * from ta ...

  9. windows端口被占用

    查看端口号被占用进程netstat -a -n -o 强制结束PIDtaskkill /pid:604 /F

  10. 【转】17种常用的JS正则表达式 非负浮点数 非负正数.

    <input type='text' id='SYS_PAGE_JumpPage' name='SYS_PAGE_JumpPage' size='3' maxlength='5' onkeyup ...