面向對象
封裝
- 封裝函數,寫入參數,而後return出去
- 構造函數,內部使用this變量,經過使用new運算符生成實例,實例對象的constructor屬性指向他們的構造函數
- prototype,把那些不變的屬性和方法直接定義在prototype對象上,每個構造函數都有一個prototype屬性,指向另一個對象,這個對象的全部屬性和方法都會被構造函數的實例所繼承。
- instanceof運算符 用於驗證原型對象與實例對象之間的關係;
- hasOwnProperty('屬性')方法 用於判斷某一個屬性究竟是本地屬性仍是繼承自prototype對象的屬性;
- in運算符 用於判斷某個實例是否含有某個屬性,無論是否是本地屬性,,,,,還能夠用於遍歷某個對象的全部屬性。 for in。
構造函數的繼承
對象之間的‘繼承方法’javascript
- 構造函數的綁定,經過call或apply方法
- prototype模式,A的原型對象指向B的實例,A則能夠繼承B
- 直接繼承prototype,A的原型對象指向B的原型,(優:效率較高,省內存;缺:A的原型修改會反映到B的原型)
- 利用空對象做爲中介,B的原型指向C的原型,A的原型指向B的實例
- 拷貝繼承,將B的原型的屬性和方法循環遍歷賦給A的原型
- 任何一個原型對象都有一個constructor屬性,指向它的構造函數
- 每個實例也有一個constructor屬性,默認調用prototype對象的constructor屬性
- 若是替換的A的原型對象 則必須爲新的原型對象加上constructor屬性,並將這個屬性指回原來的構造函數
非構造函數的繼承
- object函數 即把子對象的prototype屬性指向父對象
- 淺拷貝 把父對象的屬性所有拷貝給子對象
- 深拷貝
- 淺拷貝會出現問題,若是父對象的屬性爲數組或者另一個對象,那麼實際上子對象得到的只是一個內存地址,而不是真正拷貝
參考文章:一,二,三html
歡迎關注本站公眾號,獲取更多信息