手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:Javascript

setInterval和setTimeout到底有啥区别?

对于javascript的setInterval和setTimeout,很多人到现在一直搞不清楚。其实,真的很简单,也很方便的就能让人搞清楚在什么时候用什么函数。

当然我说的是简单的方法,请打开词霸,查看interval和timeout,就可以明白很多了

interval: n. 间隔;幕间休息;间距

timeout: n. 暂时休息;工间休息;超时

看到这两个意思,估计你也可以明白,setTimeout是在超过你定义的时间后,执行。而setInterval是间隔你定义时间区间执行函数。这样解释就让你明白很多了吧?

以前写的:

之所以写这篇文章,主要是因为看了http://www.phpweblog.net/jig68/archive/2010/03/17/7137.html这篇博客。才明白还是有很多人不太了解这方面,所以,换个简单的解释方法,总可以让人明白了吧?
PS:意外啊,一不小心多复制了点代码。。。

Tags: setinterval, settimeout

Javascript:不要将属性写在prototype里

没有仔细研究过,但觉得得这就象PHP的类(Class)的复制和引用的关系。好象差不多。

原文来自:http://www.beiju123.cn/blog/?p=304

年前,某次分享会上听玉伯偶然说了这句话,当时糊里糊涂,不明所以,偶然有一天我做一个东西,发现某个对象的实例之间竟然会互相操作了定义在 prototype里的属性,于是我验证了下:

JavaScript代码
  1. var objA=function(){  
  2.   
  3. }  
  4. objA.prototype={  
  5.     name:{},  
  6.     setName:function(str){  
  7.         this.name=str;  
  8.     },  
  9.     getName:function(){  
  10.         return this.name;  
  11.     }  
  12. }  
  13. var a=new objA();  
  14.   
  15. var b=new objA();  
  16. //a.name={firstname:"孙",fathername:"信宇"};//undefined  
  17. a.name.firstname="孙";//弹出sun  
  18. alert(b.name.firstname);  

在这个例子里,当我修改实例a的name属性的时候,实例b的name属性页跟着变了,而且说明他们引用了同一份对象.

如果name属性是值类型,例如字符串,就不会与这种问题了,那是因为字符串每次被操作都返回新实例,当然反映不出冲突来了.
那为什么会出现这种冲突呢?
专业术语我不太会讲,但是prototype这种原型继承的好处其实就是节省程序运行空间,当你从objA实例化两个实例:a和b时,并不会创建两份属性 和方法,而是把他们都指向一份属性和方法,所以prototype里的所有的东西都被所有的实例共享,实例中保存的只是一个json索引.
正因为如此,如果整个改变name的值的话,让他指向别的对象,这样就不会互相影响了,而且对于值类型来说,本质就是每次操作都会返回新的实例,所以不会 出现冲突.
对于这种冲突来说,最好的解决办法就是将属性从prototype里移出来,写在构造函数里:

JavaScript代码
  1. var objA=function(){  
  2.     this.name={}  
  3. }  
  4. objA.prototype={  
  5.     setName:function(str){  
  6.         this.name=str;  
  7.     },  
  8.     getName:function(){  
  9.         return this.name;  
  10.     }  
  11. }  

这样再试一次就会发现,每次创建实例都会创建一个新的name属性对象,而不是指向同一个对象;
也可以在prototype理的init方法里用this.name={}来初始化配置参数,属性等内容,反正就是不能写在prototype里面.但是 可以在函数里初始化定义.

还有一点要注意:我个人认为,js里所有的东西都是对象,包括值类型,他们之所以表现出非引用类型的性质,是因为每次对这些对象操作都会返回新的实 例,这只是一种假象,事实上可以说,js里所有的东西都是引用类型,只是值类型在被操作时引用总是被改变,表面上来看就是非引用类型了.

--EOF--

即使是上面的情况,我还是认为可以看看

http://lifesinger.org/blog/2009/01/javascript-run-mechanism/

http://www.cnblogs.com/rainman/archive/2009/04/28/1445687.html

带动画的GIF图片在IE中不能正常工作

这个问题,怎么说呢,先把症状重复一遍吧:IE显示了图片,但是动画却不能播放。而在FirFox中却能正常的工作。
一直以来,我都以为是浏览器的关系。没有设定好而导致这种情况发生,比如一些在IE核心上开发的浏览器(maxthon)等,都可以把GIF动画关闭的。所以我也就没有仔细研究过。

来看看这个:
IE和FirFox在很多地方都有着或多或少的不同,这导致在开发时需要考虑很多的特殊情况。在最近的项目中居然发现带动画的GIF图片在页面Load之 后再以脚本控制的方式展现时,动画不能表现出来。在我的项目中,需要在点击一个按钮后来显示一个动态的Loading图片以此表示程序正在进行后台处理。 这是通过一段jQuery代码来实现的:

XML/HTML代码
  1. <font size="3" face="Calibri"><script language="javascript" type="text/javascript">function showMessage() {  
  2.         ......  
  3.         $("div#Processing").show();  
  4.         ......  
  5.     }</script>  
  6. <div id="Processing" style="display: none">  
  7.     <center>  
  8.         <img src="placeOrder_processing.gif" />  
  9.     </center>  
  10. </div></font>  

E显示了图片,但是动画却不能播放。而在FirFox中却能正常的工作。当你将整个DIV加入到DOM中时,这个DIV是隐藏的,不可见的。但是当你将其 属性设置为可见时,动画却不能被正常播放。如果将带动画的GIF图片直接以可见的形式加入到DOM中,它是可以正确的现实并播放动画的。那么,可以这样更 改代码:

XML/HTML代码
  1. <font size="3" face="Calibri"><script language="javascript" type="text/javascript">  
  2.     function showMessage() {  
  3.          
  4.         $("div#Processing").show();  
  5.         var imgSrc = '<%=ResolveUrl("~/Images/Checkout/placeOrder_processing.gif") %>';  
  6.         $("td#imgSection").append("<img src='" + imgSrc + "'/>");  
  7.           
  8.     }     
  9. </script></font>  

这样,在可见的内容中将Img加入到DOM中就可以解决这个问题了。
--EOF--
贴出这个案例地址是在:http://www.cnblogs.com/zlgcool/archive/2010/03/15/1686507.html,真的很意外的例子,所以就记录下来了

jQuery写的tab切换

花了半小时左右写了这个小东西。没有封装成插件。因为我觉得性能不好。主要就是想试一下$('xxx').data()这个方法。
在页面不大的时候,其实真的可以用这个方法来缓存ajax的数据。

JavaScript代码
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
  2. <html>  
  3.  <head>  
  4.   <title> New Document </title>  
  5.   <meta name="Generator" content="EditPlus">  
  6.   <meta name="Author" content="">  
  7.   <meta name="Keywords" content="">  
  8.   <meta name="Description" content="">  
  9.   <script src="http://localhost/jquery.js"></script>  
  10.   <style>  
  11.     .mytab{border:1px solid #888;cursor:pointer;}  
  12.     .showdiv{border:1px solid #888;cursor:pointer;}  
  13.   </style>  
  14.  </head>  
  15.   
  16.  <body>  
  17.     <div>  
  18.         <span class="mytab">Tab1</span>  
  19.         <span class="mytab">Tab2</span>  
  20.     </div>  
  21.     <div id='tab-1' style="display:none" rel="http://localhost/test.php" class="showdiv">  
  22.     </div>  
  23.     <div id='tab-2' style="display:none" class="showdiv">  
  24.         ddssasdflkjasdflkjalsdkfj  
  25.     </div>  
  26.   
  27.     <input type='button' value="click" id='clickid'>  
  28.     <script language="JavaScript">  
  29.     <!--  
  30.         $(document).ready(function(){  
  31.             $('body').append("<div id='testData' />");  
  32.   
  33.             $('.mytab').each(function(i){  
  34.                 $(this).click(function(){  
  35.                     var j = i+1;  
  36.                     var id = 'tab-' + j;  
  37.                     var src = $('#'+id).attr('rel');  
  38.                     if( src ){  
  39.                         if($('testData').data('data_'+id)){  
  40.                             return ;  
  41.                         }else{  
  42.                             $.get( src ,function(data){  
  43.                                 if(data){  
  44.                                     $('testData').data('data_'+id,data);  
  45.                                     $('#'+id).html(data);  
  46.                                 }  
  47.                             });  
  48.                         }  
  49.                     }  
  50.                     var len = $('.mytab').length;  
  51.                     for (var s=1;s<=len ; s++){  
  52.                         s == j ? $('#'+id).show() : $('#tab-'+s).hide();  
  53.                     }  
  54.   
  55.                 });  
  56.             });  
  57.         });  
  58.     //-->  
  59.     </script>  
  60.  </body>  
  61. </html>  

纯实现,无性能无效果。只是可以运行而己
目前我就在tab的切换和Div的显示方面没有想到更好的。。。其实如果显示内容的div不用ID也可以这样写:

 

JavaScript代码
  1. $('.test').hide();  
  2. $('.test').eq(i).show();  

避免了循环

 

随便写写。。。也请随便看看

文件保存后自动刷新浏览器页面