JS面向對象之原型

JS面向對象之原型
一、從對象引用的問題說起
    
如上code中,創建了p1、p2對象,比較p1中的showName函數和p2中的showName函數,結果爲false;
雖然兩個對象中的函數的形式、實現的功能都是一樣的,但由於p1、p2是對象的引用,分別指向的是不同的兩塊內存區域,所以比較的結果爲false;
假設有1000個對象,就要在內存中開闢1000個內存區域,並且每個對象中都有showName函數,這就極大的浪費了內存空間,怎麼辦呢?我們想最好把這個showName函數給提出去,作爲一個公共函數,這時原型就橫空出世了,就是爲了解決上述問題。
原型用來提取對象下面公用的方法或者屬性,讓公用的方法、屬性在內存中只存在一份,以提高性能。

二、原型中的函數和普通函數有何區別?
    可將原型的概念和css中的class的概念對照起來理解:
原型中的函數 -- css中的class,可複用,優先級低
普通函數 -- css中的style,不可複用,優先級高
    結合下面代碼方便理解:


三、通過原型改成工廠方式:
    
此時再比較兩個對象的showName函數,結果爲true,說明該公共函數在內存中只佔一份。

四、原型的書寫原則
公共的屬性和方法寫在原型中;對象自己的屬性和方法,寫在構造函數中
一般是構造函數加屬性、原型加方法。

總結:
原型就是公共屬性和方法的容器,作用就是減少內存的浪費,提高性能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章