捲入 JS 的大熱潮

我學 JS 是因為網頁開發突然大熱門, nodejs 成熟,firefoxOS 又來參一腳。 加上我學了 HTML 和 CSS,感覺不錯; 再把 JS 學起來就能寫網頁了。 又 JS 這個語言至少要到 www 死光才有可能死亡, 應該蠻有學的價值的。

JS suck

一開始是看了 PTT 上一篇 吹捧 JS 的文章 才覺得 JS 好棒棒,就跳坑了。 結果一開始入坑超不習慣的! 一堆詭異的語法, 大括號不能定義 scope 之類的, 還有詭異的 this 、 for in 、 prototype 。

其實我對 JS 的第一印像很差, 剛轉到測量系的計概有一堂課要玩 google map, 要用 JS 加一些東西,我就學得很差, 一直搞不清楚什麼時候要加分號。

一段時間熟悉基本語法後, 就寫了個 web 版倉頡練習 軟體試刀, 一試才發現這語言內部不簡單啊, 才弄懂她內部的繼承、物件導向運作。 後來那個練習因為一開始的架構太廢了, 就半放棄的隨便完成了, 勉強讓她能動,就沒動力寫下去了。

JS rock

後來看了一些文章,才主要弄懂 JS 的物件導向和設計模式。 JS 是基於原型的物件導向 , 這篇講得很好,教會你原型繼承 再加送事件處理模型。 我看了立馬試作一個自己的事件模型; 雖然根本沒有用過。

雖然他講得很好,但我還是沒有用他的寫法。 因為考量到 Object.create 的支援問題, 和主流瀏覽器都是針對 new 作優化的。 (也許最近會改變。) 他一些觀念影響我很多, 像把工作分成多個函數,再用另一個函數包裝起來。 很多我沒想到可以包裝成函數的工作, 其實都能用 JS 做到,讓我理解到 JS 該怎麼寫 。

but JS

但隨著對 JS 的理解,我開始分析 JS 的一些設計, 發現其中的不合理處,像是 this 和 prototype 的問題。 這語言有好的部份,但有存在一些根本的問題, 就像為什麼 JavaScript 要用 Java 命名一樣。

像為什麼 this 是 dynamic scope, 而不是像其它變數是 lexical scope。 我會遇到這些問題也與我執意使用 new 關鍵字有關, 但就算全盤接受了新的語法, 問題還是存在;只是從另一個角度看。 JS 的繼承根本和函數作為第一類物件傳遞格格不入。 (英文 first-class function。)

我把自己綁上 JS 的風潮,如洪朝貴所說, JS 至少是會存活到 www 死亡的語言 , 而且在瀏覽器上開發真得很方便, 我也很喜歡 HTML 和 CSS。 (也有可能是我沒接觸過其它同等級的標記語言。) 至少會 JS,不會沒飯吃。


firefoxOS 沒成功真得很不爽啊! 根本連玩都沒玩過就掰了。 雖然我一開始不是很喜歡 JS, 但現在竟然變成我唯一可以用來寫中、 大型程式的語言,perl 一直學不好。