JavaScript三大特性,繼承封裝多態

javascript的相關特性

一.、面向對象的三大特性:繼承封裝多態

作爲基於對象的語言,js自然可以實現OOP語言的大部分特徵。

繼承:js沒有類的概念,自然不能像php那樣封裝class然後繼承最後new對象。但是js的繼承卻有更多的方式。在此討論最常用的,也就是基於原型對象原型鏈繼承。在js中,函數對象就相當於類,在函數對象中有一個prototype屬性指向了函數對象的原型對象。在函數對象上創建對象,此對象中有一個proto的屬性,也指向原型對象,那麼此屬性有什麼作用呢?在對象調用屬性或者方法時,先在實例中查找,如果找不到,則會去proto指向的原型對象中查找,這就叫做原型鏈,在此特別提出,原型對象中的方法和屬性是所有實例公用的。基於此種特性,可將其實例B重寫給函數A的原型對象,那麼實例A在使用方法時,先在實例中尋找,如果沒找到,則在原型對象也就是實例B中查找,如果還找不到,則會沿着實例B中的proto尋找函數B的原型對象,原型鏈即形成。

封裝:所謂封裝的概念,是不希望暴露函數中屬性或者方法的地址,使外界不能操作,但是可以暴露特有的公有接口,可以利用接口操作,js的函數對象中也有私有和公有的概念,當然就有封裝這個概念了。下面舉例,在此栗子中,name屬性就被封裝起來,只能通過公有的接口來訪問。

function A(){

var name='xiaoming';

this.getname=function(){

return name;

}

}

多態:弱數據類型中都是沒有多態的,或者說都天然支持多態,多態又分類的多態,方法的多態,變量的多態。可以解釋爲一種類、方法、變量的多種狀態

首先說類的多態:拿java舉栗子,如果在A類實例化出的對象接受一個對象引用,那麼需要在構造方法中指明接受對象的類名,爲了更多的接受不同類對應的對象,

就會將不同的類抽象出一個父類,然後將父類寫在構造函數中,這樣就可以接受不同類的對象了,這就叫做類的多態,一個父類的不同狀態。其實多態的前提是因爲存在這樣的限制,弱數據

類型沒有這樣的限制,那麼也就不存在多態這個說法了,或者說天然多態

class A(類名 引用){

}

方法的多態:不同類中可以用相同的方法,意爲一個方法的不同狀態,js當然可以做到

變量的多態:弱數據類型不用指定類型,當然就是多態的。

發佈了26 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章