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 阅读(955) 评论(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行.
        其实上面那段代码搞懂了,下面这个就知道了,其实这个是我写文章的时候想出来的.呵呵.


只有注册用户登录后才能发表评论。


网站导航: