html5+JS,现在正热火朝天,谷歌曾鼓吹"百分之百的Web"。为什么?1一次编写,到处运行。2不用下载额外的客户端环境,一个浏览器就搞定。3客户端程序部署很方便,更新也很容易。4随着webGL的推出,用JS在浏览器上绘制3D也成为现实。
虽然热火朝天,但纯html+JS的应用还不多。不少项目最终还是选择本地API。难道html5+JS只是陷阱?
分析了下,感觉JS在如下方面还是不足
1:JS虽然可以面向对象,但用起来还不方便
下面是来自火狐的官方例子
//声明对象
function Person() {
this.gender = null;//属性
}
//方法
Person.prototype.sayGender = function()
{
alert(this.gender);//不得不用大量this,而this可不一定指向当前对象哦,下面会介绍
};
//继承
function Student() {
Person.call(this); // 还要自己手工调用父构造函数
}
//声明是继承
Student.prototype = Object.create(Person.prototype);
不但缺乏访问的保护(没private),没有明确的接口类,而且太多机械的内容(prototype、this)要手动补充。这增大了由于程序员不小心而导致的偶发性的故障,显然限制了它在大型程序中的应用。
另外this的指向会随着JS的回调函数而改变,可以参考http://www.jb51.net/article/22040.htm
2:编辑器还是不够强
如果JS有强大的编辑器,那可以缓解手动补充机械内容带来的错误。然而遗憾的是,JS编辑器在面向对象、多JS文件编程时,代码的动态分析力短板马上显现出来。像Dreamware,一旦按JS标准面向对象写代码,自动联想直接变幻想了。另外动态检查效果也比较低(毕竟JS中空引用是合法的,解释器分不出是用户故意的还是bug)。
3:DOM与数据杂糅
过去HTML只是为了表现而诞生,JS的主要任务之一就是操纵表现,即DOM。开发纯html+JS,很容易将DOM和业务数据混杂。
不过事情正向好的方向发展,像JS面向对象与DOM与数据杂糅问题,目前已经推出了大量的扩展框架(Backbone、Ember、AngularJS等)。但随之引入了框架还互不兼容的问题,而且框架停止维护的风险也不是不存在。或许今后JS委员会会采纳优秀的标准,JS会原生支持面向对象。而扩展框架也许会“分久必合”而迎来大统一时代,就像Jquery和YUI。而编辑器问题,随着老牌软件如eclipse,DreamWare的升级,RIB,Consrtruct的推广,编辑器肯定会更智能方便。
参考:
微软、谷歌、Twitter对HTML5地位问题的争论 http://www.cnbeta.com/articles/147157.htm
Introduction to Object-Oriented JavaScript https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript
jQuery AJAX回调函数this指向问题 http://www.jb51.net/article/22040.htm