天天@BLOG

脖子越来越疼,脑袋越来越钝
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一种JavaScript的设计模式

Posted on 2006-09-26 09:56  天天在线  阅读(541)  评论(1编辑  收藏  举报
//简单的类的设计模式
//定义一个类class1
function class1() {
  
//构造函数
}


//通过指定prototype对象来实现类的成员定义
class1.prototype = {
  someProperty:
"simple",
  someMethod:
function {
    
//方法代码
  }
,
  
//其实属性和方法
}
在一个类的成员之间互相引用,必须通过this指针来进行。因为在JavaScript中第个属性和方法都是独立的,它们通过this指针联系在一个对象上。

//简单的带参数的事件设计模式
<script language="JavaScript" type="text/javascript">
<!--
//将有参数的函数封装为无参数的函数
function createFunction(obj, strFunc) {
  
var args = [];//定义args用于存储传递给事件处理程序的参数
  if(!obj) obj = window;//如果是全局函数则obj=window;
  //得到传递给事件处理程序的参数
  for(var i=2; i<arguments.length; i++{
    args.push(arguments[i]);
  }

  
//用无参数函数封装事件处理程序的调用
  return function() {
    obj[strFunc].apply(obj, args);
//将参数传递给指定的事件处理程序
  }

}


//定义类class1
function class1() {
  
//构造函数
}

class.prototype 
= {
  show:
function() {
    
//show函数的实现
     this.onshow();//触发onshow事件
  }
,
  onShow:
function() {}//定义事件接口
}

//创建class1的实例
var obj = new class1();
//创建obj的onshow事件处理程序
function objOnshow(userName) {
   alert(
"hello,"+userName);
}

//定义变量userName
var userName = "terry";
//绑定obj的onShow事件
obj.onShow=createFunction(null"objOnshow", userName);
//调用obj的show方法
obj.show();
//-->
</script>

通过createFunction封装,就可以用一种通用的方案实现参数传递。
//一个简单的开发框架
<script language="javascript">
    
var http_request = false;
    
function send_request(url) {//初始化、指定处理函数、发送请求的函数
        http_request = false;
        
//开始初始化XMLHttpRequest对象
        if(window.XMLHttpRequest) //Mozilla 浏览器
            http_request = new XMLHttpRequest();
            
if (http_request.overrideMimeType) {//设置MiME类别
                http_request.overrideMimeType("text/xml");
            }

        }

        
else if (window.ActiveXObject) // IE浏览器
            try {
                http_request 
= new ActiveXObject("Msxml2.XMLHTTP");
            }
 catch (e) {
                
try {
                    http_request 
= new ActiveXObject("Microsoft.XMLHTTP");
                }
 catch (e) {}
            }

        }

        
if (!http_request) // 异常,创建对象实例失败
            window.alert("不能创建XMLHttpRequest对象实例.");
            
return false;
        }

        http_request.onreadystatechange 
= processRequest;
        
// 确定发送请求的方式和URL以及是否同步执行下段代码
        http_request.open("GET", url, true);
        http_request.send(
null);
    }

    
// 处理返回信息的函数
    function processRequest() {
        
if (http_request.readyState == 4// 判断对象状态
            if (http_request.status == 200// 信息已经成功返回,开始处理信息
                alert(http_request.responseText);
            }
 else //页面不正常
                alert("您所请求的页面有异常。");
            }

        }

    }

</script>
@忙碌,不代表有效率;方法,远胜于苦干