Posted on 2007-09-04 09:48
tearofmoscow 阅读(955)
评论(0) 编辑 收藏
最近才了解javascript的反射机制,只知道Java中有反射机制,没想到这脚本中也有反射机制.真是应了我的那句话"没有做不到,只有想不到".费话不说太多,还是分享一下我的学习心得.
我们先创建一个简单的对象.
js 代码
- <script>"text/javascript">
- var A={
- author:"poyexinghun",
- init:function(){
- alert("load A");
- }
- }
-
- function showObject(obj){
- for(var p in obj){
- if(typeof obj[p]=="function"){
- obj[p]();
- }else if(typeof obj[p]=="string"){
- document.write(p+"--->"+obj[p]+"
");
- }
- }
- }
- showObject(A);
- </script>
注意:
typeof是用来测试数据类型的,它有六种返回值:"number," "string," "boolean," "object," "function," 和 "undefined."(不过要注意这六种返回值一定要是小写的.我在学习的过程中就遇到过这样的问题).
我们首先对传进来的对象A做了一次遍历,会得到对象中的属性名和方法名,在用ObjectName[propertyName]查看他们的类型.
我们在看看下一个问题:
js 代码
- <script>"text/javascript">
- var A={
- author:"poyexinghun",
- init_tiem:new Date(),
- init:function(){
- if(arguments.length == 1){
- if(typeof arguments[0] =="string"){
- alert(arguments[0]);
- }else{
- alert("args isn't string type");
- }
- }else{
- alert("load A");
- }
- }
- }
-
- function showObject(obj){
- for(var p in obj){
- if(typeof obj[p]=="function"){
- obj[p](new Date());
- }else if(typeof obj[p]=="string"){
- document.write(p+"--->"+obj[p]+"
");
- }else if(typeof obj[p]=="object"){
- document.write(p+"--->"+obj[p].getYear()+"-"+obj[p].getMonth()+"-"+obj[p].getDate()+"
");
- }
- }
- }
- showObject(A);
- A["init"]("aaaa");
- </script>
其实这个代码块有二个看点:
从第6行开始到第14行.
每个执行的方法中都会有一个Arguments对象,作用是获得执行方法中的参数.有了这个东东,我们就可以写多态的方法了.
还一个就是第30行.
其实上面那段代码搞懂了,下面这个就知道了,其实这个是我写文章的时候想出来的.呵呵.