文章

對 Javascript 的誤解

Javascript 是用在瀏覽器的 Scripting language ,很多 Programmer 都認為 Javascript 並不是一種嚴謹的 Language ,因為可以寫得很隨意,沒有太的限制,語法彈性很大。而事實上,大家最常用/寫的 Javascript 其實都是一些 Event driven 的功能,在 onclick, onblur 加上相對的 Javascript function。也有人認為, Javascript 根本不算得上是 Object-Oriented。

這其實只是一種誤解,在設計上 Javascript 是完全 OO 的,只是他沒有限制大家要寫得很 OO。 Javascript 的 OO 與一般 Java, C++ 的不同,Java、C++ 這些 OOP 都有 Class 和 Instance 的概念,但 Javascript 的 OO 是 Prototype-based 的,沒有 Class ,但一樣可以有 Inheritance 。簡單的一個 function ,其實就是 Object 的 Constructor 。沒有 extends ,但可用 Prototype 連接建構起 Object 之間的層級。

近期 Ajax 大熱,大家也就開始多注意了 Javascript ,而在 del.icio.us 裏就有很多不同的 Javascript 文章每日在增加,當中這篇 Object Hierarchy and Inheritance in JavaScript 用簡單的例子介紹了 Javascript 的 OO 一面,澄清了大家一般的誤解,很值得大家參考。

回應

  1. 但我覺得,就算是 Event-Driven ,但其實也在一 DOM 裏玩。所有的東西都是 Object ,不過寫法並非我們慣用的 OO 吧!

  2. ECMAScript/JavaScript 確實是一種 object-oriented programming language ,這在 ECMA-262 規範中寫的很清楚 (section 4.2 "Language Overview")。 ECMAScript 具有繼承、封裝、動態連結三大 OOPL 特性,不算是 object-based 了。
    See also: http://blog.roodo.com/rocksaying/archives/2165837.html

    C++/Java/C# 的 class-based 概念,只是 OOPL 中的其中一種世界觀,不代表全部。反而 ECMAScript 的世界觀更接近真實世界:先有實在的 object 才有概念的 class 。

  3. 現時 ECMA 262 v3 的確可以做到幾全面既OO功能(其實一些Java做不到或很難做到的佢都做到…如果你識做既話)

    問題就是prototype based並不是一個十分 developer friendly 的方法,所以才有 Dean Edwards既 base.js

    現時 v4 已支援 class definition等功能, 而 Action Script 已經 implement 左部份 v4 功能,用落的確幾好用。

*