天天看點

《JavaScript應用程式設計》一一第3章 對象

對象

javascript擁有原型繼承、動态對象擴充、閉包等特性,在現今市面上流行的所有程式設計語言中,基于對象程式設計的javascript最具靈活性與表現力。

在javascript中,你可以将諸如函數、數組、鍵/值對以及一些基礎資料結構都視為對象,甚至一些原始資料類型在用點文法做屬性操作時,也會被javascript隐式當作對象處理。為了能夠調用原型鍊上的方法,原始資料類型在使用時會被臨時包裹為對象,例如:

'[email protected]'.split('@')[1]; // => example.com

警告: 當你使用點文法操作原始資料類型的屬性時,會使得原始資料類型看起來更像是一個對象,其實它隻是在短時間内被javascript引擎臨時包裹為對象而已。你無法像對待真正的對象那樣為原始資料類型添加新的屬性,即使屬性看起來像是被添加“成功”了,實則卻不能夠被通路。

javascript語言所建構的對象系統是如此靈活強大,以至于大多數面向對象的編碼模式在javascript中都被簡化,特别是在某些輕量級的任務中,完全用不着動用這些笨重的家夥們。例如,javascript中是沒有類概念的,在其他語言中你需要依靠“惰性執行個體化”這一設計模式來實作按需建構對象, 而在javascript中,僅僅使用對象字面量就夠了。

javascript并不是一門面向對象的語言,确切地來說它是一門原型語言,然而市面上大多數javascript教程對類語言與原型語言間的差異性并沒有做詳細的介紹。為了讓javascript代碼更具執行效率與可讀性,你需要對原型程式設計的理念做足夠的掌握,不過在這之前,我們先簡單了解下傳統類繼承的一些弊病。

繼續閱讀