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")

    显示结果

  • 相关阅读:
    37.1 net-- udp传输
    37 net 网络编程
    review
    java day02 记录
    36.2 线程生命周期
    36.1 线程锁
    36 Thread 多线程
    35 编码 ASCII Unicode UTF-8 ,字符串的编码、io流的编码
    34.6 Properties(k,v存储) 和io流结合使用
    今日学习总结
  • 原文地址:https://www.cnblogs.com/zhaobao1830/p/6581949.html
Copyright © 2011-2022 走看看