jQuery中extend方法

$.extend
用一个或多个其他对象来扩展一个对象,返回被扩展的对象。
参数类型1:只传入一个对象就是对jQuery的工具方法进行扩展。
1     $(function(){
2         $.extend({
3             console: function(sMsg){
4                 console.log(sMsg);
5             }
6         });
7         $.console('jQuery');// jQuery
8     });

参数类型2:传入多个对象就是对第一个对象进行扩展。

 1     $(function(){
 2         var oTarget = {};
 3         
 4         $.extend(oTarget, {name: 'hum'});
 5         console.log(oTarget.name); // hum
 6         
 7         $.extend(oTarget, {name: 'hum'}, {age: 20});
 8         console.log(oTarget.age); // 20
 9         
10         $.extend(oTarget, {name: 'hum'}, {name: 'tyx', age: 20});
11         console.log(oTarget.name); // tyx 同名属性会被覆盖
12         
13         // 注意:$.extend()的返回值都是被扩展的对象
14     });

参数类型3:第一个参数是布尔值,后面多个对象。

  如果第一个参数为true,那么会深拷贝;

  如果第一个参数为false,进行的是浅拷贝(默认情况是浅拷贝),返回结果和没有布尔参数时一样,但是目标对象的值不会改变(其他情况目标对象和返回结果是同一个对象)。

 1     $(function(){
 2         var oTarget = {courses: {math: 100, english: 80}};
 3         console.log($.extend(oTarget, {name: 'hum', courses: { math: 50, chinese: 99}}));// {name: 'hum', courses: { math: 50, chinese: 99}}
 4         console.log(oTarget); // {name: 'hum', courses: { math: 50, chinese: 99}}
 5 
 6         var oTarget = {courses: {math: 100, english: 80}};
 7         console.log($.extend(false, oTarget, {name: 'hum', courses: { math: 50, chinese: 99}}));// {name: 'hum', courses: { math: 50, chinese: 99}}
 8         console.log(oTarget); // {courses: { math: 100, english: 80}}
 9 
10         var oTarget = {courses: {math: 100, english: 80}};
11         console.log($.extend(true, oTarget, {name: 'hum', courses: { math: 50, chinese: 99, english: 80}}));// {name: 'hum', courses: { math: 50, chinese: 99, english: 80}}
12         console.log(oTarget); // {name: 'hum', courses: { math: 50, chinese: 99, english: 80}}
13     });

深拷贝和浅拷贝的区别:

  深拷贝会让对象中的所有对象递归拷贝,目标对象和被拷贝对象之间不会存在任何引用关系;

  浅拷贝不会让对象递归拷贝,目标对象和被拷贝对象内一层的对象类型属性相互引用。

 1     $(function(){
 2         var oTarget = {courses: {math: 100, english: 80}};
 3         var oCopy = {name: 'hum', courses: { math: 50, chinese: 99}};
 4         console.log($.extend(oTarget, oCopy));// {name: 'hum', courses: { math: 50, chinese: 99}}
 5         console.log(oTarget); // {name: 'hum', courses: { math: 50, chinese: 99}}
 6         console.log(oCopy.courses == oTarget.courses); // true 两个对象的courses属性指向同一个对象
 7         oTarget.courses.chinese = 200;
 8         console.log(oCopy.courses.chinese);// 200
 9 
10         var oTarget = {courses: {math: 100, english: 80}};
11         var oCopy = {name: 'hum', courses: { math: 50, chinese: 99}};
12         console.log($.extend(true, oTarget, oCopy));// {name: 'hum', courses: { math: 50, chinese: 99, english: 80}}
13         console.log(oTarget); // {name: 'hum', courses: { math: 50, chinese: 99, english: 80}}
14         console.log(oCopy.courses == oTarget.courses); // false 两个对象的courses属性不再指向同一个对象
15         oTarget.courses.chinese = 200;
16         console.log(oCopy.courses.chinese);// 99
17     });

 

$.fn.extend
该方法只传递一个对象的时候,就是对$.fn的扩展。
其他情况下和$.extend方法一样,来扩展对象。
 1 <div>内容</div>
 2 <script src="jQuery.js"></script>
 3 <script>
 4     $(function(){
 5         $.fn.extend({
 6             changeColor: function(){
 7                 $(this).css('color', 'blue');
 8             }
 9         });
10         $('div').changeColor();
11     });
12 </script>

 

posted @ 2015-02-28 22:24  tyxloveyfq  阅读(267)  评论(0编辑  收藏  举报