標籤:概念 問題 instance 使用 本質 模型 image 記憶體 不同
1.類與對象。
對象:“萬物皆對象”。以人為例子,人類是個集體,而某一個人就是一個對象。需要和類結合起來理解。
類:指的是一個抽象的概念,物以類聚中的“類”,它是一個集合概念,是由人通過某一類事物的特點特性總結出來的。用在javascript中,就是指對象的一個集合,這類對象需要有共同的某個或某些屬性和方法的。
例:比如說杯子,“杯子”就可以看做一個類,而這個類需要有一些特徵。能盛水,可以供人喝水的,就叫做杯子。這是所有杯子的統一特徵,也就是杯子這一類。而具體到某一個杯子,比如我就有一個喝水的杯子,而這個杯子就是一個對象。這樣我們就能明顯瞭解到,類是一個虛有的存在,你不能具體指出它在哪裡,是哪個。但是對象是具體的存在,可以明確指出在哪裡,是哪個。
其實類和對象很好理解,需要結合一下現實生活中的例子就可以,因為“類”與“對象”本身就是從生活中抽離出來運用到電腦語言中的概念。
2.建立對象。
在javascript中我們需要建立一個對象,需要用new關鍵字。下面是建立對象的兩種方法。
這種建立對象的方法是最普通方便的方法,當然也存在著一些弊端。比如說,我們需要創造50個年齡都是16歲的對象,那麼我們需要寫50遍obj.age=16,這會造成一大堆的代碼重複。
針對這個問題,我們可以選擇使用原廠模式,方法如下:
工廠模型建立對象本質就是一個帶有參數的函數,由於javascript在esm6之前是沒有類這個概念的,所以用函數的思想類比類。在建立對象的時候加入實參就可以了。但是這種模式建立的對象依然存在弊端,比如說他沒有辦法給創造出來的對象增添新的屬性和方法。而且對於建立出來的對象沒有明確的分類,不同的工廠模型建立的對象都屬於object。雖然類比了類,但是沒有類本身的特性。簡單來說就是用工廠模型建立的對象,無論是建立出來的人也好,動物也好,都屬於object,並沒有真正意義上的將他們分別開了。
針對工廠模型的弊端,又提出了一種新的方式去建立對象,構建函數:
上面的instanceof是驗證建立出來的對象屬不屬於Person的。實踐證明,這種方法可以解決原廠模式關於分類的問題。構建函數的方法建立對象雖說可以解決對象歸類的問題,但是對於記憶體存在著消耗的問題,所以我們需要把構建函數和工廠模型結合起來,把屬性定義在原廠模式,將方法存放在構建函數中。
得到了建立對象的最終方案。
簡單的講解了一下物件導向中建立對象的方法,請大神批評指正,共同進步!
javascript物件導向