jQuery.extend 函数详解

2023-11-09

转载自:http://www.cnblogs.com/RascallySnake/archive/2010/05/07/1729563.html

jQuery.extend 函数详解

jQueryextend 扩展方法:

jQuery 的扩展方法 extend 是我们在写插件的过程中常用的方法,该方法有一些重载原型,在此,我们一起去了解了解。

一、jQuery的扩展方法原型是: 

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

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

var newSrc=$.extend({},src1,src2,src3...)//也就是将"{}"作为dest参数。

这样就可以将 src1, src2, src3…进行合并,然后将合并结果返回给 newSrc 了。如下例:

var result=$.extend({},{name:"Tom",age:21},{name:"Jerry",sex:"Boy"})

那么合并后的结果

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

也就是说后面的参数如果和前面的参数存在相同的名称,那么后面的会覆盖前面的参数值。

二、省略 dest 参数

上述的 extend 方法原型中的 dest 参数是可以省略的,如果省略了,则该方法就只能有一个 src 参数,而且是将该 src 合并到调用 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 方法扩展到之前扩展的 jQuerynet 命名空间中去。

三、Jquery的extend方法还有一个重载原型

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

第一个参数 boolean 代表是否进行深度拷贝,其余参数和前面介绍的一致,什么叫深层拷贝,我们看一个例子:

var result = $.extend( 
    true,  
    {},  
    { 
        name: "John", 
        location: {
            city: "Boston",
            county: "USA"
        } 
    },  
    { 
        last: "Resig", 
        location: {
            state: "MA",
            county: "China"
        } 
    } 
); 

我们可以看出 src1 中嵌套子对象 location:{city:”Boston”} , src2 中也嵌套子对象 location:{state:”MA”} ,第一个深度拷贝参数为 true,那么合并后的结果就是:

result = {
    name:"John",
    last:"Resig",
    location:{
        city:"Boston",
        state:"MA",
        county:"China"
    }
}

也就是说它会将 src 中的嵌套子对象也进行合并,而如果第一个参数 booleanfalse,我们看看合并的结果是什么,如下:

var result = $.extend( 
    false, 
    {},  
    { 
        name: "John", 
        location: {
            city: "Boston",
            county: "USA"
        } 
    },  
    { 
        last: "Resig", 
        location: {
            state: "MA",
            county: "China"
        } 
    } 
); 

那么合并后的结果就是:

result = {
    name:"John",
    last:"Resig",
    location:{
        state:"MA",
        county:"China"
    }
}

以上就是 $.extend() 在项目中经常会使用到的一些细节。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jQuery.extend 函数详解 的相关文章

随机推荐

  • 傅里叶变换公式及其推导【超详细!】

    题主本硕机械专业 自学转互联网 算法岗成功 获得阿里 字节 美团 华为等 15 offer 后续会在公众号 苏学算法 分享各类学习笔记 面试经验 感兴趣的可以关注一波 一 核心公式 时域 gt gt gt 频域 X
  • idea 类注释模板

    类注释模板如下 if PACKAGE NAME PACKAGE NAME package PACKAGE NAME end parse File Header java ClassName NAME Author name Date DAT
  • K8S 部署 SpringBoot 项目(一篇够用)

    现在比较多的互联网公司都在尝试将微服务迁到云上 这样的能够通过一些成熟的云容器管理平台更为方便地管理微服务集群 从而提高微服务的稳定性 同时也能较好地提升团队开发效率 但是迁云存在一定的技术难点 今天这篇文章主要介绍如何从0开始搭建一套基于
  • c语言程序设计

    一 c语言主要特点 1 语法设计不 太严格 软件程序自由度大 2 对变量的类型使用比较灵活 如整型和字符型数据可以通用 3 c语言具有高级语言的功能和低级语言的很多功能 可以用来编写系统软件 4 编译系统简洁 易移植等特点 例如 inclu
  • 360云盘会不会停止服务器,360云盘能否继续使用啊?

    2017 10 10 03 56 14 除非你已购买了企业云盘只要交了费就可以使用了 可用原云盘帐号登录 把原云盘内的数据一键导入企业云盘 全部 2017 10 10 03 56 14 2017 10 10 03 56 14 完善个人资料
  • Redis单机最大并发量

    redis单机最大并发量 布隆过滤器 多级缓存 客户端缓存 应用层缓存 Expires和Cache Control的区别 Nginx缓存管理 服务层缓存 进程内缓存 进程外缓存 缓存数据一致性问题的解决 引入多级缓存设计的时刻 Redis的
  • sentinelsat包介绍

    这次主要介绍sentinelsat包 包括查询条件和相关的API等 主要记录自己学习过程 首先我们需要知道欧空局ESA的数据 因为考虑数据存储等问题 会将sentinel数据从在线存档中删除 对于长期存档的数据 会出现offline情况 在
  • 编程常用英语词汇

    按字母索引 A 开头 B 开头 C 开头 D 开头 E 开头 F 开头 G 开头 H 开头 I 开头 J 开头 K 开头 L 开头 M 开头 N 开头 O 开头 P 开头 Q 开头 R 开头 S 开头 T 开头 U 开头 V 开头 W 开头
  • PHP preg_replace() 正则替换所有符合条件的字符串

    PHP preg replace 正则替换 与Javascript 正则替换不同 PHP preg replace 默认就是替换所有符号匹配条件的元素 需要我们用程序处理的数据并不总是预先以数据库思维设计的 或者说是无法用数据库的结构去存储
  • Flutter 修改默认生成的 minSdkVersion

    Flutter 修改默认生成的 minSdkVersion 问题 flutter pub get 会自动生成 android 目录 但是如果要修改 build gradle 文件里面的内容 需要每次都要手动改一下 很麻烦 解决办法 修改 f
  • 大数据毕设项目 opencv 图像识别 指纹识别 - python

    文章目录 0 前言 1 课题背景 2 效果展示 3 具体实现 3 1 图像对比过滤 3 2 图像二值化 3 3 图像侵蚀细化 3 4 图像增强 3 5 特征点检测 4 OpenCV 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升
  • 【动手学习pytorch笔记】33.Attention实现

    Attention实现 import math import torch from torch import nn from d2l import torch as d2l 带掩码的softmax 有些query是不应该看到后面的key的
  • glslViewer 介绍 (001)

    GitHub patriciogonzalezvivo glslViewer Console based GLSL Sandbox for 2D 3D shaders 起个头先 把官网的windows安装过程 step by step 化
  • unity实现mmd功能(跳舞)

    将pmx模型转化为fbx模型 将fbx模型导入 在对应的Inspector面板上的四个勾选打勾并Apply应用一下 在接下来弹出的界面中将vmd动画拖入到对应的Object栏中并点击生成相应动画的模型 vmd动画的制作 新建一个动画状态机控
  • 1.Windows环境配置

    1 做逆向Linux系统比Windows系统问题少的原因 Windows版本种类过多 Windows使用的编码不一样 2 电脑系统版本 原版Windows10即可 运行winver可查看系统版本 推荐版本 Windows10 专业版 20H
  • Hibernate-validator数据验证

    前言 数据效验工作在开发工作中 是非常重要的 保证数据的正确性 可靠性 安全性 不仅在前端进行效验 还要在后台继续进行效验 前端做验证只是为了用户体验 比如控制按钮的显示隐藏 单页应用的路由跳转等等 后端才是最终的保障 总之 一切用户的输入
  • opencv4.6 报错 error: ‘cv::xfeatures2d::SIFT’ has not been declared

    opencv4 6报错error cv xfeatures2d SIFT has not been declared SIFT 已经由 xfeatures2d 移至 主仓库 cv xfeatures2d SIFT create 改为 cv
  • 如何用一行 Python 代码实现并行

    前言 Python 在程序并行化方面多少有些声名狼藉 撇开技术上的问题 例如线程的实现和 GIL 我觉得错误的教学指导才是主要问 题 常见的经典 Python 多线程 多进程教程多显得偏 重 而且往往隔靴搔痒 没有深入探讨日常工作中最有用的
  • widows家庭版没有Hyper-v的解决方式

    首先这个是我在安装docker的时候遇到的问题 下面记录一下 复制下面代码到一个文本文件中去 然后修改后缀名为cmd然后运行即可 pushd dp0 dir b SystemRoot servicing Packages Hyper V m
  • jQuery.extend 函数详解

    转载自 http www cnblogs com RascallySnake archive 2010 05 07 1729563 html jQuery extend 函数详解 jQuery 的 extend 扩展方法 jQuery 的扩