一种JavaScript的设计模式


Posted in Javascript onNovember 22, 2006

一种JavaScript的设计模式 
//简单的类的设计模式
//定义一个类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>

Javascript 相关文章推荐
struts2 jquery 打造无限层次的树
Oct 23 Javascript
网页中的图片的处理方法与代码
Nov 26 Javascript
利用onresize使得div可以随着屏幕大小而自适应的代码
Jan 15 Javascript
实现变速回到顶部的JavaScript代码
May 09 Javascript
JQuery对checkbox操作 (循环获取)
May 20 Javascript
20个非常棒的 jQuery 幻灯片插件和教程分享
Aug 23 Javascript
JavaScript简单表格编辑功能实现方法
Apr 16 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
Feb 08 Javascript
webpack css加载和图片加载的方法示例
Sep 11 Javascript
如何安装控制器JavaScript生成插件详解
Oct 21 Javascript
vue踩坑记-在项目中安装依赖模块npm install报错
Apr 02 Javascript
小程序表单认证布局及验证详解
Jun 19 Javascript
表单内同名元素的控制
Nov 22 #Javascript
document.all与WEB标准
May 13 #Javascript
云网广告中的代码,提示出错,大家找找
Nov 21 #Javascript
在视频前插入广告
Nov 20 #Javascript
使两个iframe的高度与内容自适应,且相等
Nov 20 #Javascript
arguments对象
Nov 20 #Javascript
重定向实现代码
Nov 20 #Javascript
You might like
PHP获取栏目的所有子级和孙级栏目的ID号示例
2014/04/01 PHP
php函数重载的替代方法--伪重载详解
2015/05/08 PHP
详解WordPress中分类函数wp_list_categories的使用
2016/01/04 PHP
PHP+iframe图片上传实现即时刷新效果
2016/11/18 PHP
javascript 另一种图片滚动切换效果思路
2012/04/20 Javascript
ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox
2014/05/02 Javascript
5个JavaScript经典面试题
2014/10/13 Javascript
超赞的jQuery图片滑块动画特效代码汇总
2016/01/25 Javascript
使用jQuery操作HTML的table表格的实例解析
2016/03/13 Javascript
JS实现放大、缩小及拖拽图片的方法【可兼容IE、火狐】
2016/08/23 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
2016/11/25 Javascript
在 Angular中 使用 Lodash 的方法
2018/02/11 Javascript
highCharts提示框中显示当前时间的方法
2019/01/18 Javascript
JQuery实现简单的复选框树形结构图示例【附源码下载】
2019/07/16 jQuery
webpack是如何实现模块化加载的方法
2019/11/06 Javascript
vue-router的hooks用法详解
2020/06/08 Javascript
[47:20]DAC2018 4.4 淘汰赛 Optic vs Mineski 第一场
2018/04/05 DOTA
python实现自动更换ip的方法
2015/05/05 Python
Python 实现链表实例代码
2017/04/07 Python
python与C互相调用的方法详解
2017/07/14 Python
pandas删除行删除列增加行增加列的实现
2019/07/06 Python
Django中多种重定向方法使用详解
2019/07/17 Python
python中Lambda表达式详解
2019/11/20 Python
python 导入数据及作图的实现
2019/12/03 Python
python中JWT用户认证的实现
2020/05/18 Python
Python astype(np.float)函数使用方法解析
2020/06/08 Python
完美解决IE8下不兼容rgba()的问题
2017/03/31 HTML / CSS
公司总经理工作职责管理办法
2014/02/28 职场文书
调解协议书
2014/04/16 职场文书
幼儿园清明节活动总结
2014/07/04 职场文书
社会工作专业求职信
2014/07/15 职场文书
太行山上观后感
2015/06/05 职场文书
学习经验交流会演讲稿
2015/11/02 职场文书
企业廉洁教育心得体会
2016/01/20 职场文书
适合毕业生创业的项目怎么找?
2019/08/08 职场文书
读《工匠精神》有感:热爱工作,精益求精
2019/12/28 职场文书