当前位置: 首页 > news >正文

从jQuery 入口方式写jQuery工具类库

###1.jQuery 入口方式 在常用的jquery入口方式中估计大部分人都是直接用的是

$(function(){
  //code
})
复制代码

下面详细说一下jquery的几种入口方式: ####1.1 $ 符号+ready() 的方式 很多人可能会看到一下这种方式入口,是通过ready() 函数调用,至于原理会在下面讲解。

$(document).ready(function(){
		//code
});
复制代码

####1.2 $ 符号 +简写 的方式 这种应该最多人用的,因为写起来也是最方便的

$(function(){
  //code
})
复制代码

####1.3 jQuery +ready() 的方式 这是jquery完整的写法,也是最初的形态。

	jQuery(document).ready(function(){
			console.log('jQuery ready 入口方式');
	})
复制代码

####1.4 jQuery + 简写入口 这种方式也是跟第二种方式类似

  jQuery(function(){
	  console.log('I am jquery ');
  })
复制代码

2. 模拟 jQuery 的入口函数

####2.1 认清楚 $ 符号 其实 $ 是 jQuery 的一个代替品,也就是可以解析为什么上面四种入口方法类似的原因。 尝试:

var $ = 'I am $';
console.log($);
复制代码

从控制台打印出来的是

I am $
复制代码

再次测试,引入jQuery 后打印 $ 对象和 jQuery 对象

<script src="jquery-1.11.1.min.js"></script>
<script>
  console.log($);
  console.log(jQuery);
  console.log($===jQuery)
</script>
复制代码

打印结果如下:

结论:从上面可以得知 $ 和 jQuery 是同一个对象,也可以得知它是一个方法(或者对象),通过传递(a,b)两个参数,返回了一个新的对象,当然,在这里面也会根据你是否已经创建过该对象。


再次测试,看创建两个jQuery 对象情况会怎么样, $ 和 jQuery.

  var t1 = $;
  var t2 = jQuery;
  console.log(t1===t2);
复制代码

思考另外一种情况:

var t1 =new $;
var t2 = new jQuery;
console.log(t1===t2);
复制代码

这样子的情况请问相等嘛? 答案是 false

解析:

通过new 是开辟了一个新的空间,去存储这个对象。具体看一下

console.log(t1);
console.log(t2);
复制代码

再看,如果是通过 $ 或 jQuery 直接打印出来的对象可以看得出是 一个方法里面通过传参数,而通过 new $ 或 new jQuery 的话直接是返回的对象,下面是两个的对比。

继续探究:

返回的属性有个 proto 对象 打印一下:

var t2 = new jQuery;
console.log(t2);
console.log(t2.__proto__);
复制代码

继续推测:

//下面这句会不会是 打印jQuery 的版本号呢?
console.log(t2.__proto__.jquery);
复制代码

下面这句通过

jQuery.fn = jQuery.prototype ={
  //这里暴露一些属性接口信息
    jquery: version,// 这里把上面的版本号version 通过jquery这个接口获得
}

复制代码

详情图:

貌似跑题了。回到最初的问题 ####2.1 写一个kQuery 库 回顾js 的调用方式

var  kQuery=  function (a){
  //code
}
kQuery(a);
复制代码

测试下你的 code 块是否被执行了。 再次模拟jquery,它是返回一个 对象。 那我们的kQuery 应该也有个对象返回,

var  kQuery=  function (a){
 
    //返回对象
    return obj;
}
复制代码

上面代码明显是错误的,因为 它不知道 obj 是个什么东东,所以应该先定义 obj 为一个对象。

var  kQuery=  function (a){
     var obj ={}
    //返回对象
    return obj;
}
复制代码

再次看 第一大点,jquery的如后函数是不是都是通过ready() 来执行的,那是不是这个对象应该拥有ready 的这个方法。

var  kQuery=  function (a){
     var obj ={
        ready:function(){
              console.log('This is ready function');
        }
      }
    //返回对象
    return obj;
}
复制代码

转载于:https://juejin.im/post/5a3212565188252ae93af623

相关文章:

  • SQL优化常用方法13
  • Maven打uber-jar,运行报读取不到dubbo.xsd的解决方案
  • PHP的引用,你知道多少
  • 06、python 系列之 函数
  • ASP.NET Linux部署(2) - MS Owin + WebApi + Mono + Jexus
  • 并查集-----hrbust 1073
  • Unity LayerMask 的位运算
  • 搭建千万PV高可用系统—DNS
  • eclipse再见,android studio 新手入门教程(一)基本设置
  • CentOS 7.2 安装jdk1.8.x版本
  • UVA 725 division【暴力枚举】
  • angularjs $$phase
  • 安装PHP5,安装PHP7
  • CSS 为什么这么难学?
  • sql server 索引总结一
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • angular2 简述
  • js 实现textarea输入字数提示
  • mysql innodb 索引使用指南
  • MySQL用户中的%到底包不包括localhost?
  • OSS Web直传 (文件图片)
  • React中的“虫洞”——Context
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 产品三维模型在线预览
  • 关于字符编码你应该知道的事情
  • 聊聊directory traversal attack
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 做一名精致的JavaScripter 01:JavaScript简介
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • #pragma multi_compile #pragma shader_feature
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)php新闻发布平台 毕业设计 141646
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (轉貼) UML中文FAQ (OO) (UML)
  • .jks文件(JAVA KeyStore)
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET Micro Framework初体验(二)
  • .net 受管制代码
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .net中的Queue和Stack
  • 。Net下Windows服务程序开发疑惑
  • @Autowired多个相同类型bean装配问题
  • @Valid和@NotNull字段校验使用
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [ C++ ] STL_list 使用及其模拟实现
  • [ 蓝桥杯Web真题 ]-布局切换
  • [20170705]lsnrctl status LISTENER_SCAN1
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯