写给兔小白的js教程(5)

又上课啦,和上一次隔的时间有点长,就当是放暑假了吧。

前一段时间在研究icm的过程中,兔小白应该发现了脚本经常是以对象的形式出现的,今天我们就来看一看这种方式与之前的写法有什么不同。

前几课里,我们定义一个方法时,都是直接写function,比如:

 
 
  1. function add(x, y){ 
  2.     //....... 

这种定义实际是把add()方法放到了window对象上,由于window对象是全局的,因此它上面定义的add()方法也就是全局的了。这种方式简单,但也有缺点,一是功能复杂时,window对象上定义的方法过多,会影响脚本执行效率,二是不同功能的方法定义一不小心就会重名。

于是,面向对象式的js写法就诞生了。兔有C#的基础,可以联想一下,C#把不同的功能模块划分为类,在类内部定义变量与方法,这样各个模块就隔离开了。javascript里也差不多可以这样,看个例子:

 
 
  1. //定义一个car对象 
  2. var car = { 
  3.      
  4.     //定义一个属性叫model,注意冒号和后面逗号的用法 
  5.     model: 'golf6'
  6.  
  7.     //双定义了一个color属性 
  8.     color: 'blue'
  9.  
  10.     //定义一个方法,比如兔子非常希望咱家车能天天换颜色,定义一个changeColor方法,冒号后面的function表示此行定义的是方法 
  11.     changeColor: function(c){ 
  12.         //this是一个特殊的关键字,指向对象自身。这样在对象内部,访问自己的属性和方法,都可以通过this 
  13.         //当然也可以直接写对象名,比如car.color = c; 
  14.         //关于this,这里只列了简单情况,实际还比较复杂,后面我们再看 
  15.         this.color = c; 
  16.     }, 
  17.  
  18.     //又定义了一个方法 
  19.     drive: function(){ 
  20.         //..... 
  21.     } 
  22.  
  23. }; 
  24.  
  25. //调用一下,由于在对象外部,必须通过对象名来使用它的方法 
  26. car.changeColor('white'); 

注意几点:

1、对象用大括号表示,在大括号内部定义属性与方法;
2、每个方法与属性结尾是逗号而不是分号,最后一个不写逗号;
3、使用属性或方法时要加对象名,如果在对象内部,可以用this;

由于javascript的语法比较松散灵活,所以还可以换个写法:

 
 
  1. var car = {}; 
  2. car.model = 'golf6'
  3. car.color = 'blue'
  4. car.changeColor = function(c){ 
  5.     this.color = c; 
  6. }; 
  7. car.drive = function(){ 
  8.     //..... 
  9. }; 

与上面的区别在于先定义了空对象,然后才动态的为对象添加属性与方法。“动态”是javascript一个很有用的特性,与C#、C++等语言相比,javascript真的是太灵活了。

还有几种其它写法,但万变不离其宗,本质是一样的。由于面向对象式的写法优势很明显,所以推荐使用此种写法,如果兔去网上找代码,99.9%都一定是面向对象的,这样才能把特定功能封装到特定对象中,互不干扰。不过js的OO与C#等语言的OO相比还是有区别的,只能说形式上是面向对象的。另外还有一些比较复杂的用法和概念,我们以后遇到了再看。

今天想不出写什么游戏了,上个简单的小东西吧,先不告诉兔子是什么,也不上截图了,自己跑一跑看吧,当然啦,如果能事先通过读代码猜出是什么就更好了。另外从今天起引入jQuery了,下面的代码里会遇到,好在兔已经有基础了,肯定看得懂。

 
 
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"
  2. <html> 
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  4. <title>电子显示屏</title> 
  5. <style> 
  6. .dot{width:5px;height:5px;float:left;background-color:blue;} 
  7. .yellow{background-color:yellow} 
  8. .clear{clear:both} 
  9. </style> 
  10. <script type="text/javascript" src="jquery.js"></script> 
  11. <script type="text/javascript" language="javascript"
  12.  
  13. //定义一个bunny对象,用到了今天的知识 
  14. var bunny = { 
  15.  
  16.     //这是兔小灰要对兔小白说的话,嘿嘿,密码哟,肯定猜不出是什么东西吧? 
  17.     say: [ 
  18.         [,,,1,,,,,,,,,,,,,1], 
  19.         [,,,1,1,1,1,1,,,,,,,,,,1], 
  20.         [,,1,,,,,1,,,,,1,1,1,1,1,1,1,1,1,1,1], 
  21.         [,1,,,,,1,,,,,,1,,,,,,,,,,1], 
  22.         [1,1,1,1,1,1,1,1,1,1], 
  23.         [,1,,,,1,,,,1,,,,1,1,1,1,1,1,1,1,1,,,,,1,1,,,,,,1], 
  24.         [,1,,,,1,,,,1,,,,,,,,1,,,,,,,,1,,,1,1,,,1], 
  25.         [,1,1,1,1,1,1,1,1,1,,,,,,,,1,,,,,,,1,,,,,,1,1], 
  26.         [,,,,1,,1,,,,,,,1,1,1,1,1,1,1,1,1], 
  27.         [,,,1,,,1,,1,,,,,,,,,1,,1], 
  28.         [,,1,,,,1,,,,1,,,,,,,1,,,1], 
  29.         [1,1,,,,,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1] 
  30.     ], 
  31.  
  32.     start_x: 100, 
  33.  
  34.     //初始化方法,这回放到对象的内部了 
  35.     init: function(){ 
  36.  
  37.         //构造一个100*14的点阵(div),动态创建DOM元素 
  38.         var html = []; 
  39.         for(var i = 0;i < 14;++i){ 
  40.             for(var j = 0;j < 100;++j){ 
  41.                 html.push("<div class='dot' id='d" + i + "_" + j + "'></div>"); 
  42.             } 
  43.             html.push("<div class='clear'></div>"); 
  44.         } 
  45.         $("#container").html(html.join("")); 
  46.  
  47.         //上了个定时器 
  48.         window.setInterval(function(){ 
  49.             //所有包含yellow样式的元素都移除yellow样式 
  50.             $(".yellow").removeClass("yellow"); 
  51.             //把say中的“密码”显示到界面上去,请兔小白试着理解一下是如何工作的 
  52.             for(i = 0;i < bunny.say.length;++i){ 
  53.                 for(j = 0;j < bunny.say[i].length;++j){ 
  54.                     if(bunny.say[i][j] == 1) 
  55.                         $("#d" + (i+1) + "_" + (bunny.start_x + j)).addClass("yellow"); 
  56.                 } 
  57.             } 
  58.             if(--bunny.start_x < -35)   bunny.start_x = 100; 
  59.         },80); 
  60.     } 
  61. }; 
  62.  
  63. //$()是jQuery中的一个特殊方法,兔可以理解为它就相当于body的onload事件 
  64. //我们在其中执行一个匿名方法,在此方法中再调用bunny.init()方法 
  65. $(function(){bunny.init()}); 
  66.  
  67. </script> 
  68. <body> 
  69.     <div id="container"></div> 
  70. </body> 
  71. </html> 

最近兔子比较累,就不上家庭作业了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值