码迷,mamicode.com
首页 > Web开发 > 详细

jquery源码笔记(四): jquery.extend=jquery.fn.extend

时间:2016-07-25 01:48:11      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

extend()  方法,   合并两个或更多对象的属性到第一个对象中,jQuery后续的大部分功能都通过该函数扩展,

当参数只有一个对象时,则将对象的属性添加到jQuery对象中。

jquery 中扩展插件的形式:  2种方法

$.extend({                //扩展工具方法
        aaa:function(){
            alert(10);
        },
        bbb:function(){
            alert(20)
        }
    });

    $.fn.extend({            //扩展jquery实例方法
        aaa:function(){
            alert("fn  1");
        },
        bbb:function(){
            alert("fn  2");
        }
    });

    $.extend() ; this  -> $   this.aaa  ->  $.aaa();
    $.fn.extend();   this -> $.fn (原型)  this.aaa  -> $().aaa()

当参数中有多个对象的时候,后面的对象都是扩展到第一个对象上:

    var a = {name:"Linda"};
    $.extend(a,{name:"Joke",age:20},{address:"China"});
    console.log(a);        //    { name="Joke",  age=20,  address="China"}

还有  深拷贝 和 浅拷贝  , jquery默认是浅拷贝  

浅拷贝:
var a = {name:"Linda"};
    var b = {firends:[‘aa‘,‘bb‘,‘cc‘]};
    $.extend(a,b);
    a.firends.push(‘dd‘);
    console.log(b);        //    { firends:[‘aa‘,‘bb‘,‘cc‘,‘dd‘]}

深拷贝:
var a = {name:"Linda"};
    var b = {firends:[‘aa‘,‘bb‘,‘cc‘]};
    $.extend(true,a,b);  //第一个参数设置为 true , 那就是 深拷贝
    a.firends.push(‘dd‘);  此时a 的引用类型的 修改对  b 没有影响
    console.log(b);        //    { firends:[‘aa‘,‘bb‘,‘cc‘]}

源码的 分解:

 jQuery.extend = jQuery.fn.extend = function() {
    定义一些变量
  if(){} 看看是不是深拷贝情况
  if(){}  看看参数正确不
  if(){} 看看是不是插件情况      for(){ 可能有多个对象情况
      if(){} 防止循环引用
      if(){} 深拷贝
       else if(){} 浅拷贝
   }

 

jquery源码笔记(四): jquery.extend=jquery.fn.extend

标签:

原文地址:http://www.cnblogs.com/a-lonely-wolf/p/5702083.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!