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对象作为参数传递进去
- 有关于代码压缩优化
在代码压缩时,window和undefined都可以压缩为1个字母且确保它们就是window和undefined。外层函数只传了一个参数,因此沙箱执行时,u自然会undefined,把9个字母缩成1个字母,可以看出压缩后的代码减少一些字节数。
- 工厂模式:jQuery函数只是一个工厂,真正的构造函数是jQuery.fn.init即jQuery.prototype.init。所以我们能够实现无new构造jQuery对象。而为什么此时创建的jQuery对象还能使用jQuery原型对象上的方法呢?
- init.prototype = jQuery.fn;即 jQuery.prototype.init.prototype = jQuery.prototype;因而通过$()生成的jQuery对象的this指向jQuery.prototype,所以能正确访问jQuery原型上的属性和方法。
- $就是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 $.ajax $.get $.post的区别?
axios 发 post 请求的问题 axios是vue建议使用的基于promise的http库,它post请求默认编码是application/json格式,但是一般后台是application/x-www-form-urlencoded格式,所以后台接收会出现问题,这篇文章解释了解决问题的方法。