转自:
http://bbs.chinaunix.net/viewthread.php?tid=690254&extra=page%3D1%26filter%3Ddigest
随着ajax的升温,javascript越来越得到人们的重视。重要的是,ajax在一定程度上带来了web软件架构上的变化,人们把越来越多的功能分配到客户端实现,javascript子项目规模越来越大。如何更高效的使用javascript,如何更科学的组织javascript,如何更顺利的保证项目进展?我想就我的经验谈一点浅见。
一。 开发人员需要认真学习javascript语言本身
由于javascript是“[url =http://www2.uuzone.com/blog/555080192/18957.htm]世界上最被误解的语言[/url]”, 大部分人对javascript语法并没有全面了解过,只是凭借看起来很像c或者java的关键字按照自己的理解写javascript代码。其实 javascript是一种很独特的语言,和c++/java有非常大的区别,要想用javascript做大一些的项目,开发人员必须老老实实的学习 javascript的语法。真正掌握了语法后,我们才不会把delete看成释放内存对象,才不会为到底参数传递是值传递还是引用传递而烦恼。真正理解了javascript的基于原型的OO方式,才可能写出具有良好架构的javascript程序。
《javascript权威指南》是一本最合适的书,郑重推荐。另外ECMA262 文档可以作为参考。网上流行的jscript手册chm版本使用起来比较方便,不过这是微软的jscript实现,和标准的javascript略有区别,使用时应该注意上面的注脚信息。关于javascript的原型和OO,网上已经有很多文章介绍了,在此不再多说。
二。 良好的代码来源于良好的设计
只有设计优良,代码才会写的漂亮。现在的javascript子项目已经不是以前web项目中的“边角料”和散兵游勇了,在较大的ajax项目内, javascript将非常复杂,ajax的异步模型也和以前顺序执行的程序设计有所区别。所以建议做javascript前首先做好设计。推荐使用用例驱动的方式,把用例分析清楚,以便全局考虑所有可能的页面交互过程,绘出页面内一些对象之间的交互图,分析一些数据对象的状态,作出精细的 javascript设计。
三。 使用设计模式,复用其他领域的设计经验
如果javascript非常复杂,可以考虑使用一些模式。我想大部分做javascript的开发者都不是“javascript科班”出身吧掌握了javascript的语言本质,就可以复用我们在其他领域的经验了。使用javascript框架或者ajax框架,使用单例模式做一个全局的数据缓冲池,或者使用观察者模式把界面对象和数据对象分离,使用命令模式实现用户的操作队列等等。
四。 调试代码的技巧
javascript的代码不太好调试,这是由于:
* 一般的开发人员对javascript语言本身不太精通。也就是上面提到的。
* web项目包含较多的因素,复杂性加剧。服务端脚本、模板、html、js等很多环节都可能增加调试难度。
* 浏览器存在兼容性问题。有可能在一个细节问题上IE、Mozilla、opera等浏览器都有差异。
* 工具的缺乏。虽然mozilla的jsdebugger非常好用(还有bug,比如eval时调试器有些问题),但是其他浏览器环境下调试工具就不怎么样了。ms系统自带的script debug工具调试本地代码还可以,直接调试网站js代码表现欠佳。opera除了javascript控制台外我没有找到其他调试工具。
在此我推荐几个调试技巧:
1. 使用Mozilla firefox的jsdebugger插件。这个我不再多说了,最经典的js调试工具。在线调试远程站点的javascript效果非常棒。
2. 把问题隔离,建立本地的html文件和js文件,使用ms script debug调试工具来调试。如果js模块比较独立,可以使用这个工具的。如果写hta的项目,这个工具当然是首选了。
3. httpWatch 这是一个ie下的插件,非常好用,能够监视ie中的任何http会话,并能够看到http会话的原文。可以通过这个工具了解你的程序有没有和服务器产生会话,参数&返回的数据到底是什么。
4. 在网页内建立用于调试的textarea
可以在网页内建立一个textarea来接受你想运行的js语句,然后加一个按钮使用js的eval函数执行你输入的代码。
这种方式非常适合在线调试,网页出错后写代码输出页面内的对象值。建议写一些dump工具函数配合使用,效果更佳。
我非常喜欢这种方式,可以随时使用开关打开页面内隐藏的textarea进行调试,感觉很像给一台服务器接上了终端,然后使用shell可以做任何事情函数可以在这里重新定义,可以任意操作界面中的任何元素,调用任何对象的任何函数,输出任何你需要的运行时刻值。
5. 使用异常(exception)和断言(assert)
使用try{}catch(e){}结构不光可以屏蔽出错信息,让界面更友好。我们的程序可以使用异常、抛出异常来构建一种更好的出错处理机制。
有这样一个故事,我在使用string.localeCompare函数时随手写了这样的代码:
var iRe = str1.localeCompare(str2);
switch(iRe){
0: return ....
1: return ....
-1:return ....
defalut:throw "error:localeCompare return other value"
}
写完就忘了,没想到我的同事在linux下使用firefox时,异常被抛出了,然后我们得知:linux firefox下localeCompare返回的不只是0/1/-1,而是返回一个具体值.
这个异常抛出有效的检测出了代码的不完美。
firefox下的异常dump后能得到较为详细的调用栈信息,这一点非常好。IE的异常信息没有这么详细。
异常和断言也可以结合成为一个非常有效的调试工具。
断言(assert)是在其他语言中的一种很有效的调试工具,常常以这种形式出现:
assert( <条件> ) ;
在程序处于debug状态,当条件为假时,系统中止运行并报告这个断言。由于断言是我们自己定义的,所以我们可以很容易的判断出出错的地方,进而找到bug所在。
javascript语言没有提供宏,也没有提供assert,我们可以这样模拟
if(_is_debug) assert = function(expression , strLable){
if( !expression ) throw Error(strLable);
}
else assert = function(){};//_is_debug是一个全局变量
这样可以实现在发生"不可能的事情"的时候,让程序在调试模式下抛出异常,在发布版本中不作理会。
可以这样输出当前栈的调用信息,弥补刚才提到的IE中异常对象没有栈信息的缺陷:
function callStackInfo(){
var s="",line="";
var cer=arguments.callee.caller;
while(cer){
var sf=cer.toString();
s+=line+sf.substring(sf.indexOf('function'),sf.indexOf('{'))+"\n";
line=".."+line;
cer=cer.caller;
}
return s;
}
本文只就javascript在web开发,特别是在ajax方面的开发做了一些讨论,主要在于管窥如何更好的使用“纯javascript”。web开发还有很多其他方面,比如xml和Dom等实际上和javascript息息相关,但是本文没有涉及,还请见谅。欢迎各位朋友就我的讨论多提意见。
分享到:
相关推荐
【标题】:“JavaScript项目实战模板”是针对JavaScript编程语言的一次深入实践,旨在提升开发者在实际项目中的应用能力。在JavaScript的世界里,项目实战是非常重要的一部分,它可以帮助学习者将理论知识转化为实际...
总的来说,从JavaScript语言本身出发,通过深入学习、精心设计、应用设计模式以及掌握有效的调试技巧,开发者能够更好地应对复杂的JavaScript项目实战,从而保证项目的顺利进行。在不断变化的Web开发领域,不断提升...
在本项目"JavaScript实战项目之飞机大战"中,我们将探讨如何使用JavaScript这门客户端脚本语言来构建一个互动的游戏。JavaScript通常用于网页交互,而在这个案例中,它被用来实现了一个经典的游戏——飞机大战。通过...
《JavaScript和jQuery实战手册》是一本深入探讨JavaScript和jQuery编程技术的专业书籍,旨在帮助读者掌握这两门重要技术,提升Web开发能力。JavaScript是互联网上最广泛使用的脚本语言,而jQuery则是JavaScript的一...
"JavaScript突击-从精通到项目实战"是一份旨在帮助开发者深入理解和掌握JavaScript的资源集合,通过它,你可以从理论知识跃升至实际项目经验。 在深入探讨之前,我们先了解JavaScript的基本概念。JavaScript是一种...
“JavaScript语言精粹(修订版)”可能是Douglas Crockford的著作,他是一位JavaScript的先驱者,对语言的某些部分进行了深入探讨,特别是关于代码风格、最佳实践和设计模式。这本书强调了JavaScript的精华部分,...
"Javascript语言参考大全"很可能是一份全面涵盖JavaScript语法、对象、函数、事件处理、DOM操作等核心概念的文档。这份大全可能包含了从基础语法如变量、数据类型、运算符,到高级特性如闭包、原型链、异步编程等...
优学网项目主要分为首页+登录注册页+视频播放页内容,使用html+css实现基本页面布局,完成ajax请求数据进行页面渲染以及表单正则验证的项目练习。...资源中含有基础布局项目以及项目优化两部分,代码中有详细的注解
JavaScript是一种广泛应用于网络开发的脚本语言,尤其在前端开发中占据着核心地位。它允许开发者在用户浏览器上运行代码,实现动态交互效果,提供丰富的用户体验。本教程旨在为初学者提供一个全面的JavaScript学习...
《JavaScript和jQuery实战手册 原书第3版》是一本深入浅出的编程指南,专为想要掌握JavaScript和jQuery的开发者所设计。这本书详细介绍了这两种技术的核心概念、语法以及在实际开发中的应用,旨在帮助读者提升Web...
"JavaScript in Action: JavaScript 实战源码"很可能是针对JavaScript编程的一个实践项目或教程,旨在帮助开发者通过实际代码理解JavaScript的工作原理和应用技巧。在这个实战源码中,我们可能涵盖以下JavaScript的...
"JavaScript实战 源代码"这个项目,很显然是一本关于JavaScript编程实践的书籍的配套源代码。源代码通常包含了书中所讲解的各种示例和练习,帮助读者更好地理解和应用所学知识。 在学习JavaScript时,实战经验和...
这个项目适合初学者和有一定基础的开发者,通过它,你可以提升对前端开发的理解,尤其是对于JavaScript的动态效果处理。 首先,HTML是网页的基础结构,用于定义页面内容。在`demo.html`文件中,我们可能会看到一些...
在《JavaScript实战手册》中,畅销书作者David McFarland教你如何以高级的方式使用JavaScript,即便你只有很少或者没有编程经验。一旦掌握了这种语言的结构和术语,你将学习如何使用高级的JavaScript工具来快速为...
在"accp5.0 s2 JavaScript 项目实战 招聘网站"这个课程中,我们将深入学习如何利用JavaScript技术来构建一个完整的招聘网站。这个项目旨在帮助学员巩固JavaScript基础知识,并提升其在实际项目中的应用能力。 首先...
人脸采集_基于face-api.js实现人脸采集_javascript_项目源码_优质项目实战
基于JavaScript的航智体检管理系统源码(软件工程课设).zip基于JavaScript的航智体检管理系统源码(软件工程课设).zip基于JavaScript的航智体检管理系统源码(软件工程课设).zip基于JavaScript的航智体检管理系统源码...
JavaScript玩转机器学习-Tensorflow.js项目实战