整個JS都是對象,其中包括了:windows
什麼是面向對象?數組
面向對象是一個思想,就是把解決問題的注意力集中到對象上,把全部要作的事情經過冒泡形式傳遞給父級元素。函數
面向對象的特色?this
面向對象有三大特色 :封裝 繼承 多態
封裝:把全部相關的屬性和方法封裝在一個對象裏。對象
代碼展現:blog
class Person{ constructor (value){ this.value= value } att(animal) { console.log('this is'+ this.value) } static private () { console.log('我是私有受保護方法') } } let newPackage = new Person('你好') newPackage.att() newPackage.private()
上面是個簡單的封裝例子,經過value參數傳遞來達到咱們想要的結果,可是class類裏面的靜態方法是不會對外開放的因此會找不到這個函數繼承
繼承:本身沒有的屬性或者方法,把別人的拿來用。 事件
class PackageSon extends Person{ constructor(animal, food){ super(animal); this.food = food } zoo () { console.log('這是'+ this.animal) } eat () { console.log(this.animal+this.food) } } let newPackageSon = new PackageSon('小明', '吃飯') newPackageSon.zoo() newPackageSon.eat()
多態:不一樣的對象根據事件狀況,執行代碼不一樣。內存
class Son{ go () { console.log('星期一') } sport () { console.log('星期二') } } class request extends Son{ go () { console.log('星期三') } } var newRewriteSon = new request() newRewriteSon.go() newRewriteSon.sport()
request子類繼承了父類上面的兩個方法,子類中又從新寫了相同名字的go方法,因此子類會把繼承過來父類中的go方法覆蓋掉,從而實現本身想要的操做,打印sport方法時會依舊得出繼承父類方法的操做,因此子類只重寫了go方法原型鏈
下面來講一說什麼是原型對象
把相同屬性和方法寫在構造函數的原型對象裏構造函數的實例對象 new 出來的實例就所有能夠訪問原型對象存在的最大做用就是節省內存空間
什麼是原型鏈?
原型鏈:由各級對象的__proto__逐級繼承造成的關係
也就是說當尋找object的某個屬性或方法時,若是自己沒有就在它的 _ proto_ 裏找,若是也沒有就在它的 _ proto_ 的 _ proto_ 裏找,直到找到null,這就是原型鏈的思想。然而 _ proto_ 並不能對外公開原型鏈的做用也就是節省空間
常見的內置對象
Number String Boolean Array Date Math RegExp Function Object Global Error