zoukankan      html  css  js  c++  java
  • jquery之源码

    1.插件扩展机制

        所有的Jquery代理对象的实例,都是扩展自$.fn对象的

        意味着只要我们继续扩展$.fn这个对象的功能,就相当于扩展了所有的Jquery代理对象的实例的功能

    代码

    1  var $body=$(document.body);
    2       //  console.log($body)
    3      console.log($.fn.addClass===$body.addClass)
    4 
    5 $body.prototype=$.fn
    6 
    7 $.fn.run = function(){
    8     console.log(this)  //谁调用这个方法,This就代表谁
    9  }

    2.插件扩展机制的实现原理
    所有jquery核心函数返回的代理对象的构造器的原型就是$.fn
    * 构造器和对象的概念
    * 注意:只要看到new关键字,一定是在堆中创建了一块空间

    代码:展示jquery的原理

     1 //Proxy是代理对象
    //构造函数
    2 function Proxy(seleector) { 3 4 } 5 function $(seleector) { 6 return new Proxy(seleector) 7 } 8 9 $.fn = Proxy.prototype = { 10 addClass : function () { 11 console.log("this is addClass") 12 }, 13 removeClass :function () { 14 console.log("this is removeClss") 15 } 16 } 17 18 // Proxy.prototype = $.fn 19 20 var $body = $(document.body) 21 22 $body.addClass() 23 $body.removeClass()

     3、

     1 //扩展功能(jquery里面就是这么写的,当然这个比较简单,就是用来理解的,实际应用中,
     2 // 不需要写这个方法)
     3     $.extend = function (target) {
     4 //        console.log(target)
     5         for(var i=0;i<arguments.length;i++){
     6          //  console.log(arguments[i])
     7             for(var prop in arguments[i]){
     8                 console.log(target[prop])
     9                 target[prop] = arguments[i][prop]
    10             }
    11         }
    12     }
    13    $.fn.dnList = function (options) {
    14       //默认代码
    15       var _def_ = {
    16           data: [],
    17           p1 : 0,
    18           p2 : 0,
    19           p3 : false
    20       };
    21 
    22       var _prop_ = {
    23 
    24       };
    25       //this代表调用的当前对象  使用$.extend,传入的参数会覆盖默认的相应参数,一一对应的 
    26       $.extend(this,_def_,options,_prop_);
    27       var $ul=$("<ul></ul>");
    28       for(var i=0;i<this.data.length;i++){
    29           $ul.append($("<li>"+this.data[i]+"</li>"))
    30       }
    31       this.append($ul);
    32 
    33    }
    34 
    35    var $plug = $(".dn-liat-plug");
    36    $plug.dnList({
    37        data : ["张飞s","赵云"]
    38    });

    运行结果:

     4、

    html

    1 <div id="dn-liat-plug" class="dn-liat-plug"></div>
    2 <div id="dn-liat-plug1" class="dn-liat-plug1"></div>

    jQuery调用

    1  var $plug = $(".dn-liat-plug");
    2    $plug.dnList({
    3        data : ["张飞s","赵云"]
    4    });
    5 
    6    new dnList({
    7        dom:document.getElementById("dn-liat-plug1"),
    8        data:["zhang","yan"]
    9    })

    引入插件

     1 //工厂模式
     2 (function (root,factory,plug) {
     3     //jquery===$
     4     //root.jQuery这个是传入jquery对象的原型
     5     //为什么用这种方式?
     6     //因为在不同的系统中,无法保证传进来的是window这个作用域,有可能是其他的作用域
     7     //我们只要关心传进来的是有jquery对象就可以,jquery对象它的上下文不见得一定要在window里面
     8    root[plug] = factory(root.jQuery,plug);
     9 })(window,function ($,plug) {
    10     var _def_ = {
    11         data : [],
    12         p1 : 0,
    13         p2 : "",
    14         p3 : false
    15     };
    16     var _prop_ = {
    17         _init : function () {
    18             var $ul=$("<ul></ul>");
    19             for (var i = 0;i < this.data.length; i++){
    20                 $ul.append($("<li>"+this.data[i]+"</li>"))
    21             }
    22             this.append($ul);
    23         }
    24     }
    25 
    26     //下面提供了俩中调用方法的写法
    27 
    28     //这个是为了jquery调用写的
    29     $.fn[plug] = function (options) {
    30         $.extend(this,_def_,options,_prop_)
    31         this._init();
    32         // console.log(this)  //谁调用这个方法,this就指向谁
    33     }
    34 
    35     //这个是为了new而写的,配合的是最上面的root[plug]
    36     return function (options) {
    37         var dom = options.dom;  //调用函数的目标,DOM对象
    38         $(dom)[plug].call($(dom),options)
    39     }
    40 },"dnList")

    显示结果

  • 相关阅读:
    leetcode 131. Palindrome Partitioning
    leetcode 526. Beautiful Arrangement
    poj 1852 Ants
    leetcode 1219. Path with Maximum Gold
    leetcode 66. Plus One
    leetcode 43. Multiply Strings
    pytorch中torch.narrow()函数
    pytorch中的torch.repeat()函数与numpy.tile()
    leetcode 1051. Height Checker
    leetcode 561. Array Partition I
  • 原文地址:https://www.cnblogs.com/zhaobao1830/p/6581949.html
Copyright © 2011-2022 走看看