您现在的位置:计算机技术学习网 > 技术中心 > WEB编程 > JSP >

js自定义消息机制研究学习(四)之杂七杂八

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 11:02 点击:

终于要写完了~~^_^,期间给同事做了一次培训,写一次,讲一次的好处是,再次加深了自己对于消息、事件以及观察者模式的理解。

 

对我来说,讲清楚比写代码要难上很多。

 

这里分享一些与消息机制相关的一些杂七杂八的内容。

 

 

 

一、可测试的代码

 

早些时候,我向锐同学描述我的js程序结构,他问了我一个问题:你的js代码可测么?

 

我蒙了~虽然一直关注敏捷,一直也向往测试驱动开发,但还从没想过js代码的可测试(当然,也有测试,但基本上整测加局部测试),没有想过js的测试驱动。

 

当时,我迟疑了一会,才说应该是可测的。

 

写完上一篇文章(原谅我,觉得太简单,直接写的,忘了测试驱动),回头看了看,还好,基于消息的代码确实可以做到可测。

 

比如:

 

Animal

function Animal(config){    config=config || {};    var othis=this;    this.name=config["name"] || "Anonymous";    this.x=config["x"] || 0;    var toward=1;//右:1,左-1    var __timeout=0;    var __speed=5;    //说    this.say=function(str)    {        this.trigger({type:"say",msg:str});        return str;    }    //停    this.stop=function()    {        clearTimeout(__timeout);         this.trigger({type:"stop",x:this.x});        return this.x;    }    //跑动    this.run=function(speed)    {        __speed=speed || __speed;        this.x+=__speed*toward;        __timeout=setTimeout(function(){ othis.run();},100);        this.trigger({type:"run",x:this.x,toward:toward,speed:__speed});        return {x:this.x,toward:toward,speed:__speed};    }    //向左转    this.turnLeft=function()    {        toward=-1;        this.trigger({type:"turn",toward:toward});        return toward;    }    //向右转    this.turnRight=function()    {        toward=1;        this.trigger({type:"turn",toward:toward});        return toward;    }}方法都是有返回值,这样便于我们做一些单元测试,除了单元测试,我们还要做一些基于消息的机制的测试,构造一个伪对象去侦听Animal对象发送的消息

 

但这个Animal并不完全,还有一些不可测的,比如toward,它是完全封闭在内部的一个变量,你想要知道Animal的对象前进的方向,就有些困难。

 

不过这主要源于Animal这个类得不完全,但我们不能为了访问toward而直接把它修改为this.toward暴露出来,这样别人有可能赋一个错误的值:this.toward=100;仔细看一下代码,公开toward让人可以随别赋值是很危险的一件事情。好的方式,写一个getToward()方法。

 

一种难以测试的实现是示例这样写的:

 

Logger

///记录器function Logger(){     var dom=document.getElementById("log");      var log=function(str)      {          var time=new Date();          this.dom.innerHTML+="<br/>"+str+'<span style="color:gray">('+time.getHours()+":"+time.getMinutes()+":"+t

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • JSP与Servlet
    • 自己动手写MiniBBS系列(基本篇)之用户登录
    • JSP取当前日期
    • JDBC 入门(一)
    • 打开一个jsp页面默认查询所有数据,调用action
    • 使用JSP标签库验证用户的输入(2)完
    • 自定义JSP标签(tag)浅议
    • WIN98/2000下的jsp服务器
    • JSP内建对象(二)
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1