jQuery基础笔记(3)

一. 工具方法(以$…或jquery…这种方式调用方法)

1. $.type():判断参数的类型;

原生js判断数据类型:1. arr instanceof Array;(不能准确判断是Array还是Object)
2. arr. constructor==Arraay;(对于判断iframe里的元素,不能准确判断是Array还是Object,例如$('iframe')[0].contentWindow.arr.constructor==Array)
3. Object.prototype.toString.call(arr);(可以准确判断参数类型)

2. $.trim():消去两边的空格

3. $.proxy()

改变this指向,返回一个改变 this指向后的函数。参数一:function;参数二:希望this指向谁;也可以继续传参数,表示改变this指向后的函数的参数。例如:

function show(grade ,number)
{
	console.log(grade);
	console.log(number);
}
var obj={
	name='aimee';
}1. var fn=$.proxy(show,obj);
 	fn(2014,20140001);
 	fn(2014,20140002);
 	fn(2014,20140003);2. $.proxy(show,obj,2014,20140001)();
	$.proxy(show,obj,2014,20140002)();
	$.proxy(show,obj,2014,20140003)();
例3.(柯里化) var fn=$.proxy(show,obj,2014);
 	fn(20140001);
 	fn(20140002);
 	fn(20140003);

4. $.extend():扩展方法;

  • $.extend(dest,src1,src2,src3...)返回值为合并后的dest,由此可以看到该方法合并后是修改了dest
    的结构的。
  var result=$.extend({},{name:"Tome",age:21},{name:"Jerry",sex:"Boy"});
   合并后结果:result={name:"Jerry",age:21,sex:"Boy"};

由此可以看出,后面的参数如果和前面的参数存在的相同的名称,那么后面的会覆盖前面的参数;。jquery.extend(str1,str2)‘此覆盖过程是浅拷贝过程,拷贝过去的是地址也就是改变str2里面的引用值,则已经覆盖过的里面对应的值也改变,若想深度拷贝则需要加一个true例如jquery. extend( true, str1,str2)’

  • $.extend(src):该方法就是将src合并到jquery的全局对象中去,就是将hello方法合并到jquery的全局对象中,及jQuery的工具方法,使用时直接$.hello。
 $.extend({
 	hello:function(){alert('hello');}
 });
 $.hello();
  • $.fn.extend(src):该方法将src合并到jquery的实例对象中去,就是将hello方法合并到jquery的实例对象中。
$.fn.extend({
 	hello:function(){alert('hello');}
 });
 $.('div').hello();

5. $.Callbacks():回调函数,返回回调函数对象。

var cb=$.Callbacks();
      function fn1(){
          console.log("fn1");
      }
      function fn2(){
          console.log("fn2");
      }
      cb.add(fn1);//给回调函数添加函数;
      cb.add(fn2);
      //也可以:cb.add(fn1,fn2);或cb.add([fn1,fn2]);
      cb.fire();//触发添加的函数,重复调用fire,会重复执行

结果:
在这里插入图片描述

  • $.Callbacks('once')时,即使有多个fire()也会执行一次fire;
  • $.Callbacks('unique')时,若add里出现重复的函数,只执行这些重复的函数里的一个,如:cd.add(aa,aa,aa);只执行一个aa;
  • $.Callbacks('memory‘)时,只要前面出现过fire();即使后面再有add();不需再调用fire()也可以执行fire;
  • $.Callbacks('stopOnFalse')时,结合着return false;一起用,只会执行到return false之前,其后不会执行。
var cb=$.Callbacks('stopOnFalse');
      function fn1(){
          console.log("fn1");
      }
      function fn2(){
          console.log("fn2");
          return false;
      }
      function fn3(){
          console.log("fn3");
      }
      cb.add(fn1,fn2,fn3);
      cb.fire();

结果:
在这里插入图片描述

6. $.Deferred()延迟对象相对于一状态的Callbacks()

当服务器返回成功就执行成功的函数,当服务器返回错误则执行失败的函数。
var dtd=$.Deferrd();

  1. 触发函数:
  • dtd.resolve()相当于模拟服务器返回成功的回调函数
  • dtd.reject()相当于模拟服务器返回失败的回调函数
  • dtd.notify()相当于加载过程中
  1. 添加函数
  • done(function(){})执行成功的函数

  • fail(function(){})执行失败的函数

  • progress(function(){})执行加载中的函数

  1. 若为resolve状态,则之后不会再改变一直为resolve状态除非人为改变状态。reject同理;但是当为nofity时,成功失败的结果还没出现,所以nofity函数触发后,done和fail还会再触发一个。
 var dtd=$.Deferred();
 function aa(){
 	setInterval(function(){dtd.notify()},500);
 	setInterval(function(){dtd.resolve()},1000);
 	setInterval(function(){dtd.reject()},2000);
 }
 aa();
 dtd
 .done(function(){
 	console.log("ok");
 })
  .fail(function(){
 	console.log("error");
 })
  .progress(function(){
 	console.log("doing");
 })

结果:
在这里插入图片描述
验证了定理3,但这样写的缺点:很容易受到外界的干扰,如图:

 var dtd=$.Deferred();
 function aa(){
 	setInterval(function(){dtd.notify()},500);
 	setInterval(function(){dtd.resolve()},1000);
 	setInterval(function(){dtd.reject()},2000);
 }
 aa();
 dtd.reject();
 dtd
 .done(function(){
 	console.log("ok");
 })
  .fail(function(){
 	console.log("error");
 })
  .progress(function(){
 	console.log("doing");
 })
 

结果:
在这里插入图片描述

  1. $.Deferred.promise():不在触发函数(只读状态)
  2. 模拟网络请求:(不受外界干扰)
 function aa(){
  var dtd=$.Deferred();
 	setInterval(function(){dtd.notify()},500);
 	setInterval(function(){dtd.resolve()},1000);
 	setInterval(function(){dtd.reject()},2000);
 	return dtd.promise();
 }
 var cb=aa();
 cb.reject();//此处会报错
 cb
 .done(function(){
 	console.log("ok");
 })
  .fail(function(){
 	console.log("error");
 })
  .progress(function(){
 	console.log("doing");
 })

在这里插入图片描述
证明了$.Deferred.promise();不再触发请求,处于只读状态。

7. $.when();

返回的是一个延迟对象,参数也是延迟对象,当参数延迟对象全部触发done的时候最后会触发when返回延迟对象done函数,及调用done函数,当有一个参数延迟对象触发的是reject则调用fail函数,当触发notify时则不会调用任何函数。
例如:

function aa(){
  var dtd=$.Deferred();
 	dtd.resolve();
 	return dtd.promise();
 }
 function bb(){
  var dtd=$.Deferred();
 	dtd.reject();
 	return dtd.promise();
 }
 var cb=aa();
 var cb2=bb();
 $.when(cb,cb2)
 .done(function(){
 	console.log("ok");
 })
  .fail(function(){
 	console.log("error");
 })
  .progress(function(){
 	console.log("doing");
 })

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值