先看一段有异常的语句

var sound = 'Roar!';
function myOrneryBeast() {
this.style.color='green';//window没有style属性
alert(sound);
}
myOrneryBeast();

加入try{}catch{}

var sound='Roar';
function myOrneryBeast()
{
this.style.color='green';
alert(sound);
}
try
{
myOrneryBeast();
}
catch (theException)
{
alert('Oops,we caught an exception Name:'
+'theException.name'
+',message:'
+'theException.message'
);
}

应用实例:你自己的调试日志

平时,我们调试js的时候一般都是用alert但是,当例如遇到for(i in document){alert(i);}这样的情况的时候,确实比较头痛,用过Quarzts.net都知道。我呢,也和他类似,在我们的ADS库中添加类似的功能,类似于for(i in document){ADS.log.write(i);},下面呢,我们就开始着手完成这样的功能。

myLogger对象

function myLogger(id)
{
id=id||'ADSLogWindow';
var logWindow=null;//将在内部被对象用来引用日志窗口的DOM节点
var createWindow=function(){};//可以用这个方法在DOM树中创建logWindow节点
this.writeRaw=function(message){};//特权方法用于向日志窗口添加一天记录
} myLogger.prototype=
{
//前面讲的,用字面量语法定义
write:function(message){};//在记录日志使用最频繁的共有方法。
//他会在message中的尖括号进行编码一边在日志窗口中显示HTML源代码,该方法最终会将编码后的消息字符串传递给writeRaw()方法
header.function(message){};//向日志窗口中添加加粗、红色的条目来充当标题 //但是使用字面量不会冗余:比如又增加一个link方法
link:function(link){}; }
//上面代码也可以如下定义
//myLoger.prototype.write=function(message){};
//header.prototype.write=function(message){};//这地方菜鸟有一点不明白,为嘛不是使用//myLoger.prototype.header=function(message){};
//..
//myLogger.prototype.link=function(link){};//好吧,上面可能是因为印刷错误
if (!window.ADS){window['ADS']={};}
window['ADS']['log']=new myLogger();

下面具体分析每个方法

myLogger.createWindow()

//创建受保护的方法创建日志窗口
createWindow=function()
{
//取得新窗口在浏览器中
//居中放置时的左上角位置
var browserWindowSize=ADS.getBrowserWindowSize();//ADS库中的方法。可以看源码,待会贴出来
var top=((browserWindowSize.height-200)/2)||0;
var left=((browserWindowSize.width-200)/2)||0;
//创建作为日志窗口的Dom节点
//使用受保护的logWindow属性维护引用
logWindow=document.createElement('UL'); //指定ID值,以便必要时在DOM树中能够识别他
logWindow.setAttribute('id',id); //在屏幕中居中定位日志窗口
logWindow.style.position='absolute';
logWindow.style.top=top+'px';
logWindow.style.overflow='scroll'; //添加一些样式,以梅花外观
logWindow.style.padding='0';
logWindow.style.margin='0';
logWindow.style.border='1px solid black';
logWindow.style.backgroundColor='white';
logWindow.style.listStyle='none';
logWindow.style.font='10px/10px Verdana , Tahoma,Sans'; //将其添加到文档主体中去
document.body.appendChild(logWindow);
}

getBrowserWindowSize()方法

function getBrowserWindowSize()
{
var de = document.documentElement;
return{
'width':(window.innerWidth||(de&&de.clientWidth)||document.body.clientWidth),
'height':(window.innerHeight||(de&&de.clientHeight)||document.body.clientHeight)
}
};
window['ADS']['getBrowserWindowSize']=getBrowserWindowSize;

myLogger.writeRaw()方法

this.writeRaw=function(message)
{
//如果初始的窗口不存在。则创建它
if (!logWindow)
{
createWindow();
}
//创建列表想兵适当的添加样式
var li = document.createElement('LI');
li.style.padding='2px';
li.style.border='0';
li.style.borderBottom='1 px dotted black';
li.style.magin='0';
li.style.color='#000';
li.style.font='9px/9px Verdana ,Tahoma,Sans';//其实菜鸟并不知道这样写法是什么意思
//文章后来提到,这样嵌入样式不是个好的方式。
//为日志节点添加信息
if (typeof message='undefined')
{
li.appendchild(document.createTextNode('Message was undefined'))
}else if (typeof li.innerHTML!=undefined)
{
li.innerHTML=message;
}else
{
li.appendchild(document.createTextNode(message));
} //将这个条目添加到日志窗口
logWindow.appendChild(li);
return true; };

当我们运行ADS.log.writeRaw('This is raw.');和 ADS.log.writeRaw('<strong>This is bold!</strong>');浏览器中间会显示:

最后,为创建共有的write()和head()方法,要把下列代码添加到myLogger对象原型中去

myLogger.prototype={
write:function(message)
{
//警告message为空值
if (typeof message=='string' && message.length==0)
{
return this.writeRaw('ADS.log:null message');
}
//如果message不是字符串,则尝试调用toString()方法,如果不存在该访问则记录对象类型
if ( typeof message!='string')
{
if (message.toString)
{
return this.writeRaw(message.toString());
}
else
{
return this.writeRaw(typeof message);
}
} //转换<和>以便innerHTML不会将message作为THML进行解析
message=message.replace(/</g,"&lt;").replace(/>/g,"&gt;");//这里的/g是什么意思。。。
return this.writeRaw(message); //向日志窗口中写入一个标题
header:function(message)
{
message='<span style="color:white;background-color:black;font-weight:bold;padding:0px 5px;">'
+message+'</span>';
return this.writeRaw(message);
}
};

好,整个实例就这么完成了

还有个疑问,这个源码是怎么上传的,菜鸟没用过,找了半天没找到。。。。。待会去问问去。。。

JavaScript DOM高级程序设计 2.4-try{}catch{}--我要坚持到底!的更多相关文章

  1. JavaScript DOM高级程序设计 4.2 事件类型--我要坚持到底!

    对象事件 load和unload(载入页面的时候调用load,关闭页面的时候调用unload) abort和error 对于载入图像时出现错误的情况,可以使用error事件侦听器来进行说明: ADS. ...

  2. JavaScript DOM高级程序设计1.3-常见陷阱--我要坚持到底!

    区分大小写 单引号双引号 大多数开发人员选择用单引号,因为XTHML要求所有XHTML的属性都必须使用双引号 var html='<h2 class="a">A lis ...

  3. JavaScript DOM高级程序设计 7.向应用程序加入Ajax--我要坚持到底!

    有时候,或许是因为理解能力,也或许是因为浮躁,看东西总是不入心,而且还老是想跳过本节,或者赶紧看完本节,这样的恶性循环,让我在即没有真正的学习到知识,又打击我的学习信心,还浪费了我很多事件,我想,当遇 ...

  4. JavaScript DOM高级程序设计 4.3控制事件流和注册事件侦听器--我要坚持到底!

    一.事件流 我们通过下面一个实例,进行说明. <body> <h1>Event Flow</h1> <ul id="nav"> &l ...

  5. JavaScript DOM高级程序设计 3.6 实例 将HTML代码转换成DOM代码(附源码)--我要坚持到底!

    作为一名Web开发者,最讨厌的事情就是重复性任务,摆脱乏味的日常重复性事物的一种方法,是借助可重用的对象或者说与你现在建立的ADS库类似的库,另外一种让事情变得有意思,且能够加速开发进程的方式是编写能 ...

  6. JavaScript DOM高级程序设计 3.-DOM2和HTML2--我要坚持到底!

    由一个HTML进行说明,我就不敲了,直接copy <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" " ...

  7. JavaScript DOM 高级程序设计读书笔记二

    响应用户操作和事件 事件就是操作检测与脚本执行的组合,或者基于检测到的操作类型在某个对象上调用事件侦听器(事件处理程序). 事件的类型 事件可以分为几种类型:对象事件,鼠标事件,键盘事件(只适用于do ...

  8. JavaScript DOM 高级程序设计读书笔记一

    创建可重用的对象 简而言之,对象就是包含一组变量(称为属性)和函数(称为方法)的集合的实例.对象通常由类派生而来,而类中定义了对象拥有的属性和方法.如果你的脚本中都是对象之间的交互操作,那么就可以称之 ...

  9. JavaScript DOM高级程序设计 5动态修改样式和层叠样式表2--我要坚持到底!

    把样式置于DOM脚本之外 style属性 我们可以这样设置前景色之类的属性: element.style.color='red'; 也可以使用下面的代码设置背景颜色: element.style.ba ...

随机推荐

  1. Jquery实现手机上下滑屏滑动的特效代码

    要引入两个jquery插件 可以去网上下载 <script src="jquery-1.11.1.min.js"></script><script s ...

  2. Linux编辑器vi使用方法详细介绍

    vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...

  3. QQ聊天机器人for PHP版 (登录,收、发消息)

    <?php include "http_no_cookie.class.php"; class qq { public $sid; public $http; public ...

  4. makefile:4: *** missing separator. Stop.

    今天在编写蜂鸣器的驱动程序时,makefile文件是这样: CROSS=arm-linux- all: beep beep: beep.c $(CROSS)gcc -o beep beep.c $(C ...

  5. Opencv 摄像头矫正

    摄像机有6个外参数(3个旋转,3个平移),5个内参数(fx,fy,cx,cy,θ),摄像机的内参数在不同的视场,分辨率中是一样的,但是不同的视角下6个外参数是变化的,一个平面物体可以固定8个参数,(为 ...

  6. (转)Qt Model/View 学习笔记 (五)——View 类

    Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...

  7. approval workflow in sharepoint designer

    http://office.microsoft.com/en-us/sharepoint-designer-help/video-create-an-approval-workflow-in-shar ...

  8. Qt多国语言

    项目中需要多语言的部分以tr宏包含 例:setWindowTitle(tr("编辑")); .pro项目文件加入CODECFORTR = utf-8 #or gbk#DEFAULT ...

  9. java8 新特性

    [转载]:http://www.importnew.com/11908.html 本文由 ImportNew - 刘 家财 翻译自 javacodegeeks.欢迎加入翻译小组.转载请见文末要求. 编 ...

  10. MySQL的基本命令

    MySQL的基本命令 启动:net start mySql; 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName; 列出数据库 ...