建站学 - 轻松建站从此开始!

建站学-个人建站指南,网页制作,网站设计,网站制作教程

七个JavaScript初学者应该注意的细节(3)

时间:2011-03-14 14:49来源: 作者: 点击:
(4)事件委托 -------------------------------------------------------------------------------- 事件是JavaScript非常重要的一部分。我们想给一个列表中的链接绑定点击事件,一般的做法是写一个循环,给每个链
 

(4)事件委托

 

--------------------------------------------------------------------------------

 

事件是JavaScript非常重要的一部分。我们想给一个列表中的链接绑定点击事件,一般的做法是写一个循环,给每个链接对象绑定事件,HTML代码如下:

 

1 <h2>Great Web resources</h2> 

2 <ul id="resources"> 

3   <li><a href="http://opera.com/wsc">Opera Web Standards Curriculum</a></li> 

4   <li><a href="http://sitepoint.com">Sitepoint</a></li> 

5   <li><a href="http://alistapart.com">A List Apart</a></li> 

6   <li><a href="http://yuiblog.com">YUI Blog</a></li> 

7   <li><a href="http://blameitonthevoices.com">Blame it on the voices</a></li> 

8   <li><a href="http://oddlyspecific.com">Oddly specific</a></li> 

9 </ul>

脚本如下:

 

01 // Classic event handling example 

02 (function(){ 

03   var resources = document.getElementById('resources'); 

04   var links = resources.getElementsByTagName('a'); 

05   var all = links.length; 

06   for(var i=0;i<all;i++){ 

07     // Attach a listener to each link 

08     links[i].addEventListener('click',handler,false); 

09   }; 

10   function handler(e){ 

11     var x = e.target; // Get the link that was clicked 

12     alert(x); 

13     e.preventDefault(); 

14   }; 

15 })();

更合理的写法是只给列表的父对象绑定事件,代码如下:

 

01 (function(){ 

02   var resources = document.getElementById('resources'); 

03   resources.addEventListener('click',handler,false); 

04   function handler(e){ 

05     var x = e.target; // get the link tha 

06     if(x.nodeName.toLowerCase() === 'a'){ 

07       alert('Event delegation:' + x); 

08       e.preventDefault(); 

09     } 

10   }; 

11 })();

 

(5)匿名函数

 

--------------------------------------------------------------------------------

 

关于JavaScript的最头疼的事情之一是,它的变量没有特定的作用范围。 一般情况下,任何变量,函数,数组或对象都是全局性,这意味着在同一页上的其他脚本可以访问并覆盖它们。解决方法是把变量封装在一个匿名函数中。 例如,下面的定义将产生三个全局变量和和两个全局函数:

 

1 var name = 'Chris'; 

2 var age = '34'; 

3 var status = 'single'; 

4 function createMember(){ 

5   // [...] 

6 } 

7 function getMemberDetails(){ 

8   // [...] 

9 }

封装后如下:

 

01 var myApplication = function(){ 

02   var name = 'Chris'; 

03   var age = '34'; 

04   var status = 'single'; 

05   return{ 

06     createMember:function(){ 

07       // [...] 

08     }, 

09     getMemberDetails:function(){ 

10       // [...] 

11     } 

12   } 

13 }(); 

14 // myApplication.createMember() and 

15 // myApplication.getMemberDetails() now works.

这被称为单体模式,是JavaScript设计模式的一种,这种模式在YUI中用得非常多,改进的写法是: 


01 var myApplication = function(){ 

02   var name = 'Chris'; 

03   var age = '34'; 

04   var status = 'single'; 

05   function createMember(){ 

06     // [...] 

07   } 

08   function getMemberDetails(){ 

09     // [...] 

10   } 

11   return{ 

12     create:createMember, 

13     get:getMemberDetails 

14   } 

15 }(); 

16 //myApplication.get() and myApplication.create() now work.

   (责任编辑:admin)

织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片