Open-Source World

          let's learn and study.
          posts - 28, comments - 23, trackbacks - 0, articles - 1

          javascript反射機(jī)制

          Posted on 2007-09-04 09:48 tearofmoscow 閱讀(961) 評(píng)論(0)  編輯  收藏
          最近才了解javascript的反射機(jī)制,只知道Java中有反射機(jī)制,沒想到這腳本中也有反射機(jī)制.真是應(yīng)了我的那句話"沒有做不到,只有想不到".費(fèi)話不說太多,還是分享一下我的學(xué)習(xí)心得.

          我們先創(chuàng)建一個(gè)簡(jiǎn)單的對(duì)象.
          js 代碼
          1. <script>"text/javascript">  
          2. var A={  
          3.     author:"poyexinghun",  
          4.     init:function(){  
          5.         alert("load A");  
          6.     }  
          7. }  
          8.   
          9. function showObject(obj){  
          10.     for(var p in obj){  
          11.         if(typeof obj[p]=="function"){  
          12.             obj[p]();  
          13.         }else if(typeof obj[p]=="string"){  
          14.             document.write(p+"--->"+obj[p]+"
            "
            );  
          15.         }  
          16.     }  
          17. }  
          18. showObject(A);  
          19. </script> 
          注意:
                   typeof是用來測(cè)試數(shù)據(jù)類型的,它有六種返回值:"number," "string," "boolean," "object," "function," 和 "undefined."(不過要注意這六種返回值一定要是小寫的.我在學(xué)習(xí)的過程中就遇到過這樣的問題).

                    我們首先對(duì)傳進(jìn)來的對(duì)象A做了一次遍歷,會(huì)得到對(duì)象中的屬性名和方法名,在用ObjectName[propertyName]查看他們的類型.

          我們?cè)诳纯聪乱粋€(gè)問題:
          js 代碼
          1. <script>"text/javascript">  
          2. var A={  
          3.     author:"poyexinghun",  
          4.     init_tiem:new Date(),  
          5.     init:function(){  
          6.         if(arguments.length == 1){  
          7.             if(typeof arguments[0] =="string"){  
          8.                 alert(arguments[0]);  
          9.             }else{  
          10.                 alert("args isn't string type");  
          11.             }  
          12.         }else{  
          13.             alert("load A");  
          14.         }  
          15.     }  
          16. }  
          17.   
          18. function showObject(obj){  
          19.     for(var p in obj){  
          20.         if(typeof obj[p]=="function"){  
          21.             obj[p](new Date());  
          22.         }else if(typeof obj[p]=="string"){  
          23.             document.write(p+"--->"+obj[p]+"
            "
            );  
          24.         }else if(typeof obj[p]=="object"){  
          25.             document.write(p+"--->"+obj[p].getYear()+"-"+obj[p].getMonth()+"-"+obj[p].getDate()+"
            "
            );  
          26.         }  
          27.     }  
          28. }  
          29. showObject(A);  
          30. A["init"]("aaaa");  
          31. </script>  
          其實(shí)這個(gè)代碼塊有二個(gè)看點(diǎn):
          從第6行開始到第14行.
                  每個(gè)執(zhí)行的方法中都會(huì)有一個(gè)Arguments對(duì)象,作用是獲得執(zhí)行方法中的參數(shù).有了這個(gè)東東,我們就可以寫多態(tài)的方法了.

          還一個(gè)就是第30行.
                  其實(shí)上面那段代碼搞懂了,下面這個(gè)就知道了,其實(shí)這個(gè)是我寫文章的時(shí)候想出來的.呵呵.


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 长治县| 西林县| 景德镇市| 奇台县| 阜康市| 阿鲁科尔沁旗| 林州市| 黄石市| 山丹县| 红安县| 合阳县| 云阳县| 蒙阴县| 河西区| 新蔡县| 墨竹工卡县| 安龙县| 佛学| 灌云县| 曲靖市| 仁布县| 卢龙县| 池州市| 称多县| 讷河市| 桃江县| 峨眉山市| 通化市| 桓台县| 嘉祥县| 元谋县| 勐海县| 富平县| 马尔康县| 金阳县| 丰都县| 罗源县| 永修县| 正镶白旗| 手机| 石门县|