千家信息网

jQuery中$的原理是什么

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇"jQuery中$的原理是什么"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"jQ
千家信息网最后更新 2026年11月02日jQuery中$的原理是什么

这篇"jQuery中$的原理是什么"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"jQuery中$的原理是什么"文章吧。

1、外层沙箱及命名空间$

为了避免声明了一些全局变量而污染,把代码放在一个"沙箱执行",jQuery具体的实现,都被包含在了一个立即执行函数构造的闭包里面,然后在暴露出命名空间(可以为API,函数,对象),如只暴露 $ 和 jQuery 这2个变量给外界:

(function(window, undefined) {  // 用一个函数域包起来,就是所谓的沙箱    // 在这里边var定义的变量,属于这个函数域内的局部变量,避免污染全局  // 把当前沙箱需要的外部变量通过函数参数引入进来    // 只要保证参数对内提供的接口的一致性,还可以随意替换传进来的这个参数  "use strict";  window.jQuery = window.$ = jQuery;  ... // jQuery代码}) (window);

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

// 压缩策略// w -> window , u -> undefined(function(w, u) {  "use strict";  w.jQuery = w.$ = jQuery;  var a;  if (a == u)    return;})(window);

2、jQuery 无 new 构造

实例化一个jQuery对象的方法:

$('#text').text('myJQuery'); // 无 new 构造

等价于:

var text = new $('#text');text.text('myJQuery');

使用jQuery时一般都使用无new的构造方式,直接$('')进行构造,这也是jQuery十分便捷的一个地方。当使用无new构造方式时,其本质是相当于new jQuery(),在jQuery内部的实现方式是:

(function(window, undefined) {  // ...  jQuery = function(selector, context) {    // 实例化方法jQuery()实际上是调用了其拓展的原型方法 jQuery.fn.init    return new jQuery.fn.init(selector, context, rootjQuery);  },  // jQuery.prototype是jQuery的原型,挂载在上面的方法,即可让所有生成的jQuery对象使用  jQuery.fn = jQuery.prototype = {    // 实例化方法,这个方法可以称作 jQuery 对象构造器    init: function(selector, context, rootjQuery) {          // ...    }  }  // jQuery 没有使用 new 运算符将 jQuery 实例化,而是直接调用其函数  // 要实现这样,那么 jQuery 就要看成一个类,且返回一个正确的实例,且实例还要能正确访问 jQuery 类原型上的属性与方法  // jQuery 的方式是通过原型传递解决问题,把 jQuery 的原型传递给jQuery.prototype.init.prototype,所以通过这个方法生成的实例 this 所指向的仍然是 jQuery.fn,所以能正确访问 jQuery 类原型上的属性与方法  jQuery.fn.init.prototype = jQuery.fn;})(window);

1) 使用$('xxx')这种实例化方式,其内部调用的是 return new jQuery.fn.init(selector, context, rootjQuery) 这一句话,也就是构造实例是交给了 jQuery.fn.init() 方法去完成。

2) 将 jQuery.fn.init 的 prototype 属性设置为 jQuery.fn,那么使用 new jQuery.fn.init() 生成的对象的原型对象就是 jQuery.fn ,所以挂载到 jQuery.fn 上面的函数就相当于挂载到 jQuery.fn.init() 生成的 jQuery 对象上,所有使用 new jQuery.fn.init() 生成的对象也能够访问到 jQuery.fn 上的所有原型方法。

3) 实例化方法存在这么一个关系链 :

① jQuery.fn.init.prototype = jQuery.fn = jQuery.prototype ;

② new jQuery.fn.init() 相当于 new jQuery() ;

③ jQuery() 返回的是 new jQuery.fn.init(),而 var obj = new jQuery(),所以这 2 者是相当的,所以我们可以无 new 实例化 jQuery 对象。

以上就是关于"jQuery中$的原理是什么"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

方法 实例 对象 函数 原型 内容 变量 方式 沙箱 生成 代码 参数 就是 原理 字母 属性 全局 外层 文章 知识 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 喔噻互联网科技有限公司 互联网科技垄断 腾讯阿里互联网科技 互联网科技的发展 金融科技与互联网金融 善班互联网科技 致骋互联网科技 苏州互联网科技贷款公司 猫创互联网科技 佰商互联网科技有限公司 剑昆互联网络科技有限公司临桂 广州恒生互联网科技有限 想开互联网科技公司怎么样 上海科技产业互联网平台 广州百诚互联网科技有限公司官网 领航科技大厦互联网公司 从那以后互联网科技有限公司 广州有谷有贝互联网科技有限公司 济南小医互联网科技有限公司招聘 科技信息时代互联网发展 广东猪兼强互联网科技有限公司 互联网和科技技术 科技金融是不是互联网金融 互联网与科技金融数据 腾讯科技 互联网女皇 人人互联网科技是培训 成都仁贤领冠互联网科技有限公司 广州慧亚互联网科技怎么样 北京天晋互联网科技有限公司 互联网科技创新方面的资料
0