Open-Source World

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

          javascript反射機制

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

          我們先創建一個簡單的對象.
          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是用來測試數據類型的,它有六種返回值:"number," "string," "boolean," "object," "function," 和 "undefined."(不過要注意這六種返回值一定要是小寫的.我在學習的過程中就遇到過這樣的問題).

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

          我們在看看下一個問題:
          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>  
          其實這個代碼塊有二個看點:
          從第6行開始到第14行.
                  每個執行的方法中都會有一個Arguments對象,作用是獲得執行方法中的參數.有了這個東東,我們就可以寫多態的方法了.

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


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 闵行区| 仙游县| 衡山县| 德兴市| 平山县| 曲麻莱县| 诏安县| 济南市| 磐安县| 宁乡县| 云和县| 北安市| 铁岭县| 墨江| 电白县| 长汀县| 华宁县| 西丰县| 通江县| 山西省| 夏邑县| 彰化市| 新安县| 工布江达县| 开阳县| 中卫市| 集贤县| 神木县| 丰原市| 太仆寺旗| 安宁市| 黄平县| 那曲县| 汶川县| 张掖市| 民勤县| 大埔县| 济南市| 南投市| 宝兴县| 鹤岗市|