一种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 相关文章推荐
JS中的构造函数详细解析
Mar 10 Javascript
Javascript 浮点运算精度问题分析与解决
Mar 26 Javascript
JavaScript如何获取数组最大值和最小值
Nov 18 Javascript
jQuery+HTML5+CSS3制作支持响应式布局时间轴插件
Aug 10 Javascript
jquery获取点击控件的绝对位置简单实例
Oct 13 Javascript
jQuery webuploader分片上传大文件
Nov 07 Javascript
js获取元素下的第一级子元素的方法(推荐)
Mar 05 Javascript
详解angularjs获取元素以及angular.element()用法
Jul 25 Javascript
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
Sep 26 Javascript
JavaScript自动生成 年月范围 选择功能完整示例【基于jQuery插件】
Sep 03 jQuery
vue实现数字动态翻牌的效果(开箱即用)
Dec 08 Javascript
es6函数中的作用域实例分析
Apr 18 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
IStream与TStream之间的相互转换
2008/08/01 PHP
深入探讨<br />和 \r\n两者有什么区别??
2013/06/05 PHP
php打开远程文件的方法和风险及解决方法
2013/11/12 PHP
php网页病毒清除类
2014/12/08 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
2017/07/19 PHP
利用laravel+ajax实现文件上传功能方法示例
2017/08/13 PHP
php封装的pdo数据库操作工具类与用法示例
2019/05/08 PHP
jquery实现瀑布流效果分享
2014/03/26 Javascript
JavaScript闭包实例讲解
2014/04/22 Javascript
jQuery 实现自动填充邮箱功能(带下拉提示)
2014/10/14 Javascript
谈谈第三方App接入微信登录 解读
2016/12/27 Javascript
js实现九宫格拼图小游戏
2017/02/13 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
2017/08/04 Javascript
Node.js微信 access_token ( jsapi_ticket ) 存取与刷新的示例
2017/09/30 Javascript
jQuery除指定区域外点击任何地方隐藏DIV功能
2017/11/13 jQuery
通过图带你深入了解vue的响应式原理
2019/06/21 Javascript
[03:02]辉夜杯主赛事第二日 每日之星
2015/12/27 DOTA
python批量生成本地ip地址的方法
2015/03/23 Python
Python切片知识解析
2016/03/06 Python
Python环境变量设置方法
2016/08/28 Python
Python简单实现安全开关文件的两种方式
2016/09/19 Python
Python实现随机生成有效手机号码及身份证功能示例
2017/06/05 Python
python利用正则表达式排除集合中字符的功能示例
2017/10/10 Python
Python绘制3D图形
2018/05/03 Python
python实现石头剪刀布小游戏
2021/01/20 Python
CSS3中的常用选择器使用示例整理
2016/06/13 HTML / CSS
武汉世纪畅想数字传播有限公司 .NET笔试题
2015/06/13 面试题
override和overload的区别
2016/03/09 面试题
生物化工专业个人自荐信
2013/09/26 职场文书
关于毕业的广播稿
2014/01/10 职场文书
高职教师先进事迹材料
2014/08/24 职场文书
政审证明材料
2015/06/19 职场文书
李清照的诗词赏析(20首)
2019/08/22 职场文书
《悬崖边的树》读后感2篇
2019/12/02 职场文书
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android
铁拳制作人赞《铁拳7》老头环Mod:制作精良 但别弄了
2022/04/03 其他游戏