• 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>
  • 相关阅读:
    eclipse中设置自动生成的author,date等注释
    【转】科大校长给数学系学弟学妹的忠告&本科数学参考书
    Eclipse的properties文件中文乱码解决方法
    log4j快速入门
    启动tomcat出现Removing obsolete files from server... Could not clean server of obsolete ……错误
    eclipse构建及运行maven web项目
    Eclipse+Maven创建webapp项目
    linux中通过lsof恢复删除的文件,前题是fd被占用。
    IP工具类-自己动手做个ip解析器
    第4章 集合类
  • 原文地址:https://www.cnblogs.com/tyxloveyfq/p/4306291.html
Copyright © 2020-2023  润新知