天天看點

轉:javascript 對象和原型

下面的代碼建立對象:

這樣的代碼沒偶任何問題,首先用周遊的方式來找到person所有的key(屬性和方法名)。然後我們用索引的方式來通路person對象的name屬性。

這些都沒有問題,可是我們是不是看到了一個引申的問題,從傳統面向對象的語言來看,name和age應該屬于私有變量,那麼這樣用person簡簡單單的通路,是不是破壞了封裝性呢?

還記得我們在前文中說過的麼?var的叫變量,沒有var的叫屬性。那麼我們如果講代碼改成這個樣子。

這樣就可以封裝得很好了,這也是在Javascript中的封裝方式。

原型的提出:

結果彈出false。也就是說,這兩個對象的方法是不同的方法。那麼我們知道,在C#中,每個對象會維護着一個方法表,可是方法表應該指向同一塊位址。如果是這樣的話,那當我們聲明了100個對象,是不是要建立100個對象拷貝,對空間是不是一個很大的浪費呢?

于是我們就想了這樣的解決辦法,用prototype:

這樣就可以了。是以你還會再說是否用prototype都是一樣的麼?

繼續閱讀