一种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 相关文章推荐
DHTML Slide Show script图片轮换
Mar 03 Javascript
js浮动图片的动态效果
Jul 10 Javascript
jquery 无限级下拉菜单的简单实现代码
Feb 21 Javascript
js数组依据下标删除元素
Apr 14 Javascript
jquery实现从数组移除指定的值
Jun 24 Javascript
原生js实现放大镜效果
Jan 11 Javascript
深入理解Commonjs规范及Node模块实现
May 17 Javascript
微信小程序 es6-promise.js封装请求与处理异步进程
Jun 12 Javascript
浅谈angular.copy() 深拷贝
Sep 14 Javascript
微信小程序tabBar模板用法实例分析【附demo源码下载】
Nov 28 Javascript
layui实现把数据表格时间戳转换为时间格式的例子
Sep 12 Javascript
js实现开关灯效果
Mar 30 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
暴雪前总裁遗憾:没尽早追赶Dota 取消星际争霸幽灵
2020/03/08 星际争霸
php-fpm配置详解
2014/02/12 PHP
ThinkPHP 模板引擎使用详解
2017/05/07 PHP
PHP利用Socket获取网站的SSL证书与公钥
2017/06/18 PHP
为你的网站增加亮点的9款jQuery插件推荐
2011/05/03 Javascript
html+javascript实现可拖动可提交的弹出层对话框效果
2013/08/05 Javascript
js中判断用户输入的值是否为空的简单实例
2013/12/23 Javascript
js 跳出页面的frameset框架示例介绍
2013/12/23 Javascript
如何在Linux上安装Node.js
2016/04/01 Javascript
用jQuery实现优酷首页轮播图
2017/01/09 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
JQuery属性操作与循环用法示例
2019/05/15 jQuery
微信小程序吸底区域适配iPhoneX的实现
2020/04/09 Javascript
Vue数据双向绑定原理实例解析
2020/05/15 Javascript
vue实现简单跑马灯效果
2020/05/25 Javascript
ant design 日期格式化的实现
2020/10/27 Javascript
[08:54]《一刀刀一天》之DOTA全时刻18:十九支奔赴西雅图队伍全部出炉
2014/06/04 DOTA
[05:03]显微镜下的DOTA2第十期——Ti3豪之超神幽鬼
2014/06/23 DOTA
[47:22]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:11:02]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python创建和使用字典实例详解
2013/11/01 Python
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
2016/07/01 Python
Python实现的三层BP神经网络算法示例
2018/02/07 Python
Pandas中Series和DataFrame的索引实现
2019/06/27 Python
Python动态语言与鸭子类型详解
2019/07/01 Python
Python实现中值滤波去噪方式
2019/12/18 Python
Django crontab定时任务模块操作方法解析
2020/09/10 Python
洲际酒店集团美国官网:IHG美国
2017/11/16 全球购物
美国鲜花递送:UrbanStems
2021/01/04 全球购物
linux面试题参考答案(8)
2015/08/11 面试题
旷课检讨书1000字
2014/02/14 职场文书
婚纱店策划方案
2014/05/22 职场文书
岗位职责说明书模板
2014/07/30 职场文书
乡镇组织委员个人整改措施
2014/09/16 职场文书
2015年社区流动人口工作总结
2015/05/12 职场文书
党员读书活动心得体会
2016/01/14 职场文书