Credit : nitrOVM |
像 Java 和 C++ 這類常見的物件導向程式語言在建立物件的時候,會需要先寫出一個物件的類別(Class),然後,才利用這個類別來建立包含資料的物件,所以,物件受限於類別而無法即時新增屬性和方法 ( 註: 技術上還是可行的),而像 Javascript 這種 Prototype-based Language 就不需先有 Class 再有 Object,直接就可以定義一個包含資料的物件來用哩 !
不過,不需要定義類別並不代表 Prototype-based Language 不能夠有建構式(Constructor),阿舍一開始誤會這個不需要類別的意思,就以為 Prototype-based Language 不需要有建構式,其實,Prototype-based Language 還是可以透過建構式來初始化物件,只是,沒有「Class」這樣的保留字來建立類別和需要有類別才能有物件的。
另外,除了直接建立物件之外,Prototype-based Language 的物件繼承方式也不太一樣,像 Java 或 C++ 的繼承是在定義類別時指定要繼承的類別來當作父類別 (SuperClass),而 Prototype-based Language 的繼承則是經由指定物件的 Prototype 物件來達成的,所以,Prototype-based Language 的物件可以在建立後的任何時間,透過 Prototype 屬性來指定要繼承的物件,而且,只要被繼承的物件新增屬性或方法,繼而的物件也可以馬上使用這些新增的屬性和方法哩 !
所以,從上面提到的二項特性來看,大概就可以瞭解到,為什麼這種語言會叫做 Prototype-based Language 了,主要是因為這一類的語言所建立的每一個物件都是一個「原型」,不需要透過任何範本的方式才能建立,而且是即建即用,方法和屬性也是可以動態的新增,因此,此種語言的彈性會比需要定義類別式的語言來得大,但是,相對的,程式結構就比較不嚴謹,也比較容易發生執行時期的錯誤哩 !
最後,要說明一下,本文所主要是以 Javascript 為基礎來說明 Prototype-based Language,但是,Prototype-based Language 已經發展出許多種語言出來,不只有 Javascript,而每一種 Prototype-based Language 在實作上都會有一些些的差異的,但是,大原則是不會變的。
參考資料:
Class-based vs. prototype-based languages
Prototype-based programming (Wikipedia)
Professional: JavaScript for Web Developers
What does it mean that javascript is a prototype-based language
推薦閱讀
- 問題沒解決嗎? 更多的 Ubuntu 教學在 這裡
- Prompt Injection: 提示詞注入安全漏洞
- 二款 Mac 無痛安裝的 Stable Diffusion 軟體
- 用 AI 寫部落格文章好不好 ?
- 沒有免費的 Midjourney 和 Colab 又不想花錢怎麼辦 ?
- 不學 Prompt 技巧也能善用 ChatGPT 的簡單方法
- 企業 AI 應用:不只是聊天機器人
- Automatic 比 Automatic1111 更好用 ? 都是 Stable Diffusion WebUI
- Stable Diffusion 的 /describe 圖生文功能
- AI 畫出讓人可怖的美圖 !
有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁
沒有留言 :
張貼留言
歡迎留言提問和討論 .... 😁