• jQuery的$.extend方法使用


    一、需求

      项目中有多个模块用到jQuery中的DataTable插件。开始开发时,各自使用自己的配置,导致表格的一些统一的配置被分散到各个模块中。现想将这些统一的配置提取到公共js中,以便于方便修改统一配置(做人做事都有一个度,不是非黑即白,水至清则无鱼。程序也是一样,都想将代码写成统一的,但是各模块的功能又是有区别的,所以总是统一、特性、再到统一部分)。

    二、方案

      一般像这种有配置参数的jQuery的插件(DataTable、Flot等),都会有一个默认的配置,在实现中基本都会用到$.extend方法。但是这个默认配置不一定符合我们的需求,首先大部分插件中的提示文字都是英文的,样式等也不一定符合。所以我们要定义一个自己的通用配置,先将特殊配置和通用配置组合,再去和默认配置组合。上网搜了下,extend方法就是将多个对象里的属性组合起来,如果同一个属性,多个对象都有,则使用后面对象的属性值。

      1、先创建一个public.js,在每个模块的页面中引入该js。在这个js中定义一个自己的通用配置,例如TABLE_OPTION,在使用DataTable时,用以下方法组合特殊配置和通用配置:

    1 var oTableOption = $.extend(TABLE_OPTION,{
    2     // 特殊配置或者需要覆盖通用配置的属性
    3 });
    4 
    5 var oTable = $("#table_id").DataTable(oTableOption);

      使用这种方法可以实现上述需求,但是在用HBuilder时,$.extend敲出后,默认的参数列表是$.extend(true, target object, object);

      1)首先第一个参数是一个boolean类型,上网查了下,这个boolean表示是否深入组合,例如如下情况:

     1 var oTarget = {
     2     a:1,
     3     b:2,
     4     c:{
     5         ca:1,
     6         cb:2
     7     }
     8 };
     9 
    10 var oObject = {
    11     a:2,
    12     c:{
    13         ca:2,
    14         cd:4
    15     },
    16     d:{
    17         da:1
    18     }
    19 };
    20 
    21 
    22 var oResult = $.extend(true,oTarget,oObject);

      最终oResult的结果应该是

    oResult = {
        a:2,
        b:2,
        c:{
            ca:2,
            cb:2,
            cd:4
        },
        d:{
            da:1
        }
    };

      即如果第一个参数是boolean类型,并且是true(默认是false),则会使用深层次的组合,否则对于例子中的c属性,直接使用oObject对象中的c,而不会组合oTarget和oObject的c属性。

      2)从参数命名上看,第二个参数是target,说明可能会将后面的对象属性直接组合到target上,即会修改target,这点肯定不适合我们的需求,如果每个人都能把TABLE_OPTION修改,到时出了问题都没法定位时那里修改的。从网上搜了下不修改target的方法,有一个比较好的实现,其实jQuery插件也是使用这种实现。

      var oOption = $.extend(true,{},TABLE_OPTION,{ // 新加配置});

      就是奖target设定为一个空对象,这样修改只会修改{}对象的内容,不会修改到TABLE_OPTION。

    每多学一点知识,就少写一行代码。
  • 相关阅读:
    微软 面试题
    SQL 公用表表达式(CTE)
    SQL 事务(Transaction)
    arch中pacman的使用
    arch中yaourt的安装和使用
    今天安装了arch,感觉不错,这速度可以
    纠结于arch+xfce还是xubuntu
    ubuntu 提速
    【转】linux下杀死进程
    【转】debian下的update-rc.d的使用
  • 原文地址:https://www.cnblogs.com/guanmu/p/5060344.html
Copyright © 2020-2023  润新知