最近更新: 2008-01-11

JavaScript 需要類別繼承概念嗎?

這2天在找 JavaScript 在 server-side 的軟體開發工作文件時,找到 Peter's Blog,我看完其中的《Transitioning from Java Classes to JavaScript Prototypes》一文之後,很佩服 Peter 這位作者,能夠擺脫過去使用 Java 時的類別繼承思維,認真去研究 JavaScript 的 OO 哲學。

Peter 原本嘗試要在 JaavScript 上實作基於類別繼承(Class-Based Inheritance in JavaScript) 的功能,但隨著他對 JavaScript 的了解日深,他最後放棄初衷,因為:I struggled and struggled but simulating class-based inheritance in JavaScript really doesn't work and makes the code...well...very un-JavaScript-ish.

Peter 也在文章中以 Java 和 JavaScript 交互實作類別繼承、mixin 等等編程手法,藉此說明 JavaScript 如何運用自身的特性更簡單地實現 OOP (至少是程式碼重用這一段)。

I hope this article helps at least a few people see how code reuse is actually easier in JavaScript than in class-based languages like Java.
Peter

國內軟體設計教育目前的主流程式語言是 Java/C# ,許多程序員是透過 Java/C# 學習個體導向程式設計(OOP)觀念的。不幸的是,因此侷限了程序員對 OOPL 的評價視野。

Kenming 說「不要從程式語言學習物件導向!」。我個人學習 OOP 的過程,使我支持他的看法。我當初在學習 OOP 觀念的時候,實作的程式語言是 QuickBASIC + Assembly 以及 C 語言。那時 Java還沒出現,C++還沒有STL,而我手上的程式碼大部份都是 C ,用 C 去實踐 OOP 概念是很正常的。這些經驗使我跳脫程式語言本身對 OOP 的侷限性(那些語言不支援 OO),從更抽象的概念去思考 OOP 。所以我並不會用一種程式語言處理個體的思維方式去評價另一種程式語言對 OOP 的支持程度。

很多熟悉 Java 的程序員,在初接觸 JavaScript 時,最常見的反應就是 "怎麼沒有 class? 那要如何繼承?"。因此批評 JavaScript 不是 OOPL 。這實在是大大的誤解。Peter 的態度,值得那些人學習。

樂多舊網址: http://blog.roodo.com/rocksaying/archives/4963259.html

樂多舊回應
未留名 (#comment-15515105)
Fri, 11 Jan 2008 22:31:28 +0800
請問石頭成老大,[class]這個單字應如何發音才正確?身邊有的人唸k-lay-s,也有人唸k-lar-s
未留名 (#comment-15534033)
Sun, 13 Jan 2008 23:42:49 +0800