JS 現在也許還不行 未來會更好

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






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章