欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jQuery原理篇

程序员文章站 2024-03-24 17:41:46
...

jQuery的核心:$即jQuery的别称,$()函数用于将任何对象包裹成jQuery对象,之后允许调用定义在jQuery对象上的任何方法。

即jQuery不仅仅是一个类,也是一个普通的对象,在jQuery本身的属性中还增加了一系列的方法:Ajax、each、工具。

$实现的源码如下:

  (function(w){
        //工厂
        function jQuery(selector, context){
            return new jQuery.fn.init(selector, context);
        }
        //给原型提供一个简写方式
        jQuery.fn = jQuery.prototype = {

        };
        //init才是jQuery中真正的构造函数
        var init = jQuery.fn.init = function(selector, context){

        };
        //把构造函数的原型,替换为jQuery工厂的原型
        //这么做的目的是为了实现jQuery的插件机制,让外界可以通过jQuery方便的进行扩展
        init.prototype = jQuery.fn;
        //w->window  u->undefined
        w.jQuery = w.$ = jQuery;
    }(window));
  • 沙箱模式:用立即执行函数将所有的内容包起来,在里面定义变量属于局部变量不会污染全局,并且把外部的需要的window对象作为参数传递进去
  1. 有关于代码压缩优化

在代码压缩时,window和undefined都可以压缩为1个字母且确保它们就是window和undefined。外层函数只传了一个参数,因此沙箱执行时,u自然会undefined,把9个字母缩成1个字母,可以看出压缩后的代码减少一些字节数。

  • 工厂模式jQuery函数只是一个工厂,真正的构造函数是jQuery.fn.init即jQuery.prototype.init。所以我们能够实现无new构造jQuery对象。而为什么此时创建的jQuery对象还能使用jQuery原型对象上的方法呢?
  1.  init.prototype = jQuery.fn;即 jQuery.prototype.init.prototype = jQuery.prototype;因而通过$()生成的jQuery对象的this指向jQuery.prototype,所以能正确访问jQuery原型上的属性和方法。
  2. $就是jQuery对象,$.post(),$.get(),$.ajax()等这些都是jquery这个对象的方法

ps:$.post(),$.get(),$.ajax()的区别:

$.ajax 是 jQuery 底层 AJAX 实现,$.ajax是一种通用的底层封装
$.get 只处理简单的 GET 请求功能以取代复杂 $.ajax,请求成功时可调用回调函数。不支持出错时执行函数,否则必须使用$.ajax。
$.post 只处理 post请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。不支持出错时执行函数,否则必须使用$.ajax。

另外由于content-type的设置,它们传递参数的格式会有区别,具体不展开讲了,因为我主要用的ajax还是简单的js对象传参,后期遇到具体问题再讨论~~

References:

浅析jQuery基本结构($实现原理)

浅谈jQuery的$原理

在jquery中,用 $. 和 $().有什么区别,它们分别的含义是什么?

jQuery的实现原理和核心

jquery $.ajax $.get $.post的区别?

axios 发 post 请求的问题 axios是vue建议使用的基于promise的http库,它post请求默认编码是application/json格式,但是一般后台是application/x-www-form-urlencoded格式,所以后台接收会出现问题,这篇文章解释了解决问题的方法。