从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/5a3217c8f265da432652da11

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值