本文是在JavaScript之三里面链接内容的中文翻译。我会尽可能做到信达雅且保持作者原意不变,OK,let's Go!

  

  jQuery.extend(target,[object1],[objectN])

  jQuery.extend(目标对象,对象1,对象N)

    概述:合并2个或以上的对象属性到第一个对象上。(此处的意思就是将对象1对象N的属性合并到目标对象上,这里是直译的)

       jQuery.extend(目标对象,对象1,对象N)

         目标对象:

         类型:object

         接收传进来的其他对象的属性或者当它是唯一参数时,扩展jQuery命名空间

         对象1

         类型:object

         包含要合并的额外属性

         对象N

         类型:object

         包含要合并的额外属性

       jQuery.extend([deep],目标对象,对象1,[对象N])  

         对象1

         类型:Boolean

         如果为true,则变为递归合并(又叫深度复制 [deep copy])

         目标对象:

         类型:object

         被扩展对象,接收新属性

         对象1

         类型:object

         包含要合并的额外属性

         对象N

         类型:object

         包含要合并的额外属性

  当2个或更多对象参数被添加到$.extend()里面时,所有这些对象的属性都会被合并到目标对象,如果参数为null或undefined时,则会被忽略。

  如果$.extend()里只有1个参数,则意味着目标对象被省略了,在此种情况下,jQUery对象本身会被当做目标对象。这样的话,你可以添加新方法到jQUery命名空间内,这对想要给jQUery添加新方法的插件开发者来说非常有用。

  注意:目标对象将会被修改然后被返回,但如果你想保留所有的初始对象,可以传递一个{}作为目标对象。//见最后一个例子

 var object = $.extend({}, object1, object2);

  通过$.extend()执行的合并默认情况下是非递归的,但如果前一个对象的属性本身是array或object类型,那么这个属性就会被第二个以及随后的具有同属性名的对象重写,他们的值不会合并,这在下面的例子中通过检查banana的值可以看到。但如果第一个方法参数传递的是true,则将会被递归合并。

  注意:不支持传递false给第一个参数。

  未定义属性不会被复制,但从原型中继承过来的属性则可以被复制,通过构造函数或者JavaScript类型比如 Date or RegExp创建的对象的属性不会被重建,而且将作为结果对象或数组的简单对象。

  在深度扩展中,Object 和 Array将会被扩展,但原始类型封装的对象比如 String, Boolean, 和 Number则不会,深度扩展周期数据结构将会导致错误。

  如果有超出这些方法的需求,只能用自定义方法来替代,或者是使用一个像lodash那样的库。

  

  案例:

  合并2个对象,修改第一个对象

 <!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>jQuery.extend demo</title>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body> <div id="log"></div> <script>
var object1 = {
apple: 0,
banana: { weight: 52, price: 100 },
cherry: 97
};
var object2 = {
banana: { price: 200 },
durian: 100
}; // Merge object2 into object1
$.extend( object1, object2 ); // Assuming JSON.stringify - not available in IE<8
$( "#log" ).append( JSON.stringify( object1 ) );
</script> </body>
</html>

Demo:

{"apple":0,"banana":{"price":200},"cherry":97,"durian":100}

  递归合并2个对象,修改第一个对象

 <!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>jQuery.extend demo</title>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body> <div id="log"></div> <script>
var object1 = {
apple: 0,
banana: { weight: 52, price: 100 },
cherry: 97
};
var object2 = {
banana: { price: 200 },
durian: 100
}; // Merge object2 into object1, recursively
$.extend( true, object1, object2 ); // Assuming JSON.stringify - not available in IE<8
$( "#log" ).append( JSON.stringify( object1 ) );
</script> </body>
</html>

Demo:

{"apple":0,"banana":{"weight":52,"price":200},"cherry":97,"durian":100}

  合并默认值和设置值,且不修改默认值,这也是常见的插件开发类型。

 <!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>jQuery.extend demo</title>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body> <div id="log"></div> <script>
var defaults = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar" }; // Merge defaults and options, without modifying defaults
var settings = $.extend( {}, defaults, options ); // Assuming JSON.stringify - not available in IE<8
$( "#log" ).append( "<div><b>defaults -- </b>" + JSON.stringify( defaults ) + "</div>" );
$( "#log" ).append( "<div><b>options -- </b>" + JSON.stringify( options ) + "</div>" );
$( "#log" ).append( "<div><b>settings -- </b>" + JSON.stringify( settings ) + "</div>" );
</script> </body>
</html>

Demo:

defaults -- {"validate":false,"limit":5,"name":"foo"}
options -- {"validate":true,"name":"bar"}
settings -- {"validate":true,"limit":5,"name":"bar"}

  

大虾翻译(一):jQuery.extend()的更多相关文章

  1. 图片放大功能插件及jquery.extend函数理解

    前端时间,产品提出社区评论中的图片需要有放大功能.感觉可以共用,所以就想整合一个插件,过程中也借鉴了一些例子. 分析下自己的代码思路: var scaleImg = function(opts) { ...

  2. jQuery为开发插件提拱了两个方法:jQuery.fn.extend(); jQuery.extend();

    jQuery为开发插件提拱了两个方法,分别是: jQuery.fn.extend(); jQuery.extend(); jQuery.fn jQuery.fn = jQuery.prototype ...

  3. jquery.extend

    经常在插件中看到jquery.extend 方法,最近在尝试写一些简单的插件,顺便研究一下这个方法. 原文:http://www.cnblogs.com/RascallySnake/archive/2 ...

  4. jQuery extend扩展String原型

    jQuery.extend(String.prototype, { isPositiveInteger:function(){ return (new RegExp(/^[1-9]\d*$/).tes ...

  5. jQuery.extend和jQuery.fn.extend的区别【转】

    解释的很有意思,清晰明了又有趣,转来分享下,哈哈哈 jQuery.extend和jQuery.fn.extend的区别,其实从这两个办法本身也就可以看出来.很多地方说的也不详细.这里详细说说之间的区别 ...

  6. jQuery原生框架中的jQuery.fn.extend和jQuery.extend

    extend 方法在 jQuery 中是一个很重要的方法,jQuey 内部用它来扩展静态方法或实例方法,而且我们开发 jQuery 插件开发的时候也会用到它.但是在内部,是存在 jQuery.fn.e ...

  7. jquery.extend方法

    jquery.extend()用来扩展jquery中方法,实现插件. 1.jQuery.extend函数详细用法! 扩展jQuery静态方法. 1$.extend({ 2test:function() ...

  8. jQuery extend方法使用及实现

    一.jQuery extend方法介绍 jQuery的API手册中,extend方法挂载在jQuery和jQuery.fn两个不同对象上方法,但在jQuery内部代码实现的是相同的,只是功能却不太一样 ...

  9. jQuery.extend()方法和jQuery.fn.extend()方法源码分析

    这两个方法用的是相同的代码,一个用于给jQuery对象或者普通对象合并属性和方法一个是针对jQuery对象的实例,对于基本用法举几个例子: html代码如下: <!doctype html> ...

随机推荐

  1. codeforces 459D - Pashmak and Parmida&#39;s problem【离散化+处理+逆序对】

    题目:codeforces 459D - Pashmak and Parmida's problem 题意:给出n个数ai.然后定义f(l, r, x) 为ak = x,且l<=k<=r, ...

  2. LINQ to JavaScript 源码分析

    在.net平台工作一年有余,最喜欢的应属Linq特性 在几个移动端web小项目过程中,前端需要对json对象集合进行比较复杂的操作,为提高开发效率,引入了LINQ to Javascript,该项目地 ...

  3. 样品GA的良好理解

    遗传算法演示样本手册模拟 为了更好地理解遗传算法的计算过程,法的各    个主要运行步骤.       例:求下述二元函数的最大值: (1) 个体编码           遗传算法的运算对象是表示个体 ...

  4. Xamarin 手动安装步骤+破解

    原文:Xamarin 手动安装步骤+破解 由于Xamarin运行的时候有很多依赖项,所以现在在官网上下载的XamarinInstall只是一个下载安装器,并不是软件包.它会自动下载安装所需的依赖软件, ...

  5. 依法使用Linux,反对Linux国产化

    10月28日.中国操作系统应用推广大会在京举行,包含中央办公厅.公安部.工信部在内的多个中央国家机关部委出席该会.此次推广大会的召开或标志着操作系统国产化进程的进一步推进. 会上.中国project院 ...

  6. 阿里云server该数据光盘安装操作

    猛击这里:阿里云server该数据光盘安装操作

  7. cocos2d-x V3.0 呼叫加速度计 Acceleration

    今天克服了一个问题,我觉得非常酷 哈哈. 今天得到解决cocos2d-x 3.0 呼叫重力加速器问题,上网查了很多资料 发现是不够,不解决这个问题,我不知道如果我使用3.0 这一问题的版本号,但是,这 ...

  8. Visual Studio 有哪些好用的插件?

    推荐一批绝大部分都是免费的能较好增强写代码舒适度的. .NET Demon -- (非免费)安装后可以连续编译, 如果不买License的话过期后也还有代码改动后自动保存的上好功能, 安装它之后再也不 ...

  9. C++程序代写实现HashSet class

    C++程序代写实现HashSet class 专业程序代写(QQ:928900200) Implement a HashSet class for elements of type string.It ...

  10. T-SQL基础(7) - 透视,逆透视和分组集

    透视转换: use tempdb;if object_id('dbo.Orders', 'U') is not null drop table dbo.Orders;create table dbo. ...