受困於 DOM API 不一致、除錯工具貧弱、瀏覽器實作差異,JavaScript 長期被低估。Ajax、Apache Cocoon、ActionScript/Flash、Rhino/JVM 等生態推動其復興。Stuart Halloway 指出:JS 程式碼比同功能 Java 緊湊 10 倍。
函數為一等公民,可賦值變數、當參數傳遞、當回傳值:
var hot = function() { alert('Sweat.'); };
var cold = function() { alert('Shiver.'); };
function swap() { var tmp = hot; hot = cold; cold = tmp; }
進階:function temperature() { return current; } 回傳函數,呼叫端 temperature()() 雙重呼叫,實現行為熱插拔。
obj.color = 'blue' 或 obj.color = function() { return 'blue'; }無類別概念,以現有物件為原型克隆:
var Animal = function() { this.name = 'nobody'; this.speak = function() { return 'Who am I?'; } };
var Dog = function() { this.speak = function() { return 'Woof!'; } };
Dog.prototype = new Animal(); // 繼承
var dog = new Dog(); // dog.name='nobody', dog.speak()='Woof!'
查找規則:實例自有 → 建構函數定義 → prototype 鏈遞歸查找。可隨時覆寫單一實例行為。
Dojo 等庫善用彈性構建模組化架構。Java 陣營透過 AOP、Bytecode Enhancement、Spring 補足彈性,但學習成本高。
了解 JS 優缺點,在 Web 前端、腳本化、快速原型場景大膽使用;大型企業後端仍以靜態語言為主。JVM 多語言時代,需要時可引入 JRuby/Groovy 而非硬在 Java 寫動態代碼。