zoukankan      html  css  js  c++  java
  • jquery源码之jQ继承方法extend

    jQuery.extend = jQuery.fn.extend = function() {

      定义一些变量

      if () {}  看是不是深拷贝情况

      if () {}  看参数正确不

      if () {}  看是不是插件情况

      for () {   可能有多个对象情况

        if () {}  防止循环引用,如 $.extend(a, {name: a});  //循环引用的情况进行排除;

        if () {}  深拷贝

        else if () {}  浅拷贝

      }

    }

    知识点梳理:

    1、jQuery 是一个函数,jQuery() 返回一个对象,这个对象的构造函数是 jQuery.fn.init(),这个构造函数的原型,即 jQuery.fn.init.prototype = jQuery.fn,而 jQuery.fn = jQuery.prototype,因此,狗仔函数 jQuery.fn.init() 的原型函数就是 jQuery.prototype,总结:调用 jQuery() 之后返回的对象,其实都继承自 jQuery.prototype 原型;

    2、jquery使用同一套源码实现对于静态和实例方法的拓展,jquery使用的两种extend形式分析:

      jQuery.extend() :拓展静态方法

      jQuery.fn.extend() :拓展实例方法

      $.extend() -> this 指向 $,即jQuery函数 -> 在 this 中添加方法 aaa: this.aaa -> $.aaa()

      $.fn.extend() -> this 指向 $.fn = jQuery.prototype,在原型中添加方法aaa: this.aaa -> $().aaa(),需要在实例对象中调用aaa方法

    【当只写一个对象自变量的时候,jq中拓展插件的两种形式】

    $.extend({ // 拓展工具方法

      aaa: function() { alert(1); },

      bbb: function() { alert(2); }

    });

    $.aaa(); // 弹出 1

    $.bbb(); // 弹出 2

    $.fn.extend({ // 拓展jq实例方法

      aaa: function() { alert(3); },

      bbb: function() { alert(4); }

    });

    $().aaa();

    $().bbb();

    【当写对个对象自变量的时候,后面的对象都是拓展到第一个对象上】

    var a = {};  // 拓展对象 a的属性

    $.extend(a, {name: "hello"}, {age: 30});

    alert( a ); // 弹出 {name: "hello", age: 30}

    var a = {};  // 还可以做 深拷贝 和浅拷贝

    var b = {name: {age: 30}};

    $.extend(a, b); // $.extend() 做的浅拷贝!

    a.name.age = 20;

    alert( b.name.age );  // 弹出20

    $.extend(true, a, b); // 增加参数 true,告诉jq我要进行深拷贝

    a.name.age = 20;

    alert( b.name.age );  // 弹出30

    3、关于继承

    jq使用的是拷贝继承,比较灵活;

    类式继承:使用new 构造函数进行继承;

    原型继承:??

  • 相关阅读:
    GoogLeNet学习笔记
    ResNet学习笔记
    VGG学习笔记
    AlexNet学习笔记
    目标检测SSD
    YOLO系列(1)—— YOLO v1
    YOLO系列(2)—— YOLO v2
    R-CNN系列(4)—— Faster R-CNN
    如何打开.ipynb文件
    机器学习中的采样
  • 原文地址:https://www.cnblogs.com/shihangbo/p/8059943.html
Copyright © 2011-2022 走看看