我這篇文章會誤人子弟,我把繼承跟構造函數實例化搞混了,汗!要想搞清楚JS的繼承機制,看下大牛寫的文章:http://www.cnblogs.com/dolphinX/p/3307903.html
很早以前向大牛要了一份坦克游戲的源代碼,自己懶一直都沒有去看,這幾天突然心血來潮,竟然耐著性子一行一行的看代碼,一個源文件一個源文件的看,我被大師優秀的設計所折服,看著過程中發現一個奇怪的問題,有幾個方法所有對象都有,但是又沒有看到在哪定義了,所以我決定仔細的看這個游戲用到的框架Microsoft Ajax Framework( 可能大牛是搞C#開發的:) ),看到后面發現是通過原型(prototype)繼承的,自認為對JS的原型模式非常了解:),看了這個游戲的代碼之后,發現自己理解的還不夠深,最起碼JS所有對象之間的關系沒有搞清楚>_<。啥是原型模式?怎么實現的呢?JS所有對象間到底是啥關系呢?
1 一切皆對象!
2 對象間通過原型來實現繼承!
它是函數對象的屬性,所有函數對象都有原型(prototype)屬性,prototype是一個對象,通過構造函數創建對象時,新的對象會繼承構造函數對象的原型(prototype)。
通過原型模式實現繼承,即構造函數的prototype屬性
所有函數對象都會繼承Function對象,Function對象是所有函數對象的祖先
所有構造函數的原型通過Object構造函數創建,然后再填充其它方法與屬性,Object對象是非函數對象的祖先
思索了一下JS對象間的關系之后,我產生了一個問題:Function對象是不是所有對象的祖先啊?
1 JS對象繼承方式很詭異,不跟其他面向對象的語言一樣
2 JS對象間的關系理解的更深了,是我閱讀大牛源碼的一個收獲,以后多多看開源項目的代碼