面向?qū)ο缶幊?/h2>

1、對象:程序中描述現(xiàn)實中一個具體事物的屬性和方法的結(jié)構(gòu)

2、面向?qū)ο螅∣OP)

面向?qū)ο蟪绦蛑?,描述一個具體事物都要用對象來封裝事物的屬性和功能,寫任何程序都要先找對象,再識別對象的屬性和功能;

面向?qū)ο缶幊碳夹g(shù)的關(guān)鍵性觀念是它將數(shù)據(jù)及對數(shù)據(jù)的操作行為放在一起,作為一個相互依存、不可分割的整體——對象。對于相同類型的對象進行分類、抽象后,得出共同的特征而形成了類。面向?qū)ο缶幊叹褪嵌x這些類。


面向?qū)ο笕筇攸c

封裝:將描述一個事物的屬性和方法集中定義在一個對象中;

Why:單獨的屬性和方法是沒有意義的,只有放在對象上才有意義

便于反復(fù)調(diào)用——代碼重用,便于維護

多態(tài):重寫(實現(xiàn)子對象與父對象的差異)和重載(便于調(diào)用)

重寫:如果子對象覺得父對象的方法不好用,可以在子對象定義同名方法, 就會覆蓋父對象中的同名方法

重載:相同名稱,不同參數(shù)列表的多個函數(shù);在調(diào)用時可根據(jù)傳入?yún)?shù)的不 同,動態(tài)選擇對應(yīng)的函數(shù)執(zhí)行;

雖然js語法默認(rèn)不支持重載,但可用arguments對象(類數(shù)組對象, 調(diào)用時自動創(chuàng)建并接收所有傳入的參數(shù)值)模擬重載效果;

何時使用重載:只要多個操作共用同一個函數(shù)名時

繼承:父對象中的屬性和方法,子對象可直接使用

Why:代碼重用,節(jié)約內(nèi)存空間,便于維護

?? Js中的繼承都是通過原型(_proto_)實現(xiàn)的


3、作用域與作用域鏈

作用域:一個變量的可用范圍,實際就是變量的實際存儲位置;

作用域的本質(zhì):EC對象(執(zhí)行環(huán)境對象)的一個scope屬性,引用了window或AO對象(活動對象,專門保存本次函數(shù)調(diào)用時的局部變量),只可能是window中(全局作用域——全局變量)或AO中(函數(shù)作用域——局部變量);

作用域鏈:以當(dāng)前EC的scope屬性為起點依次引用每個AO,直到window結(jié)束,形成的多級引用關(guān)系。(只要在作用域鏈上存在的變量,當(dāng)前函數(shù)都可使用)


4、原型和原型鏈

原型:prototype,保存所有子對象共有屬性值的父對象。(每個(構(gòu)造)函數(shù)都自帶一個prototype對象,所有被構(gòu)造函數(shù)創(chuàng)建的子對象都有一個_proto_屬性指向構(gòu)造函數(shù)的prototype對象)

原型鏈:由各級子對象的_proto_屬性連續(xù)引用形成的結(jié)構(gòu),所有對象都有_proto_,所有對象原型鏈的頂部都是Object.prototype


5、閉包

閉包:內(nèi)外層函數(shù)嵌套;內(nèi)層函數(shù)必須使用了外層函數(shù)的局部變量;外層函數(shù)將內(nèi)層函數(shù)返回到外部,可以在外部調(diào)用;

何時使用閉包:想反復(fù)使用一個局部變量,且不希望被污染時,就要用閉包結(jié)構(gòu)保護局部變量。

閉包缺點:比普通函數(shù)占用更多的內(nèi)存空間(外層函數(shù)的AO)

如何使用閉包:3步

? ? a、定義外層函數(shù)(工廠函數(shù));? ? ? ? ? 特點:定義了受保護的局部變量? ? ? ? ? ? ? ? ? ? ? 返回一個專門操作局部變量的內(nèi)部函數(shù)對象

? ? b、調(diào)用外層函數(shù)(工廠函數(shù)),獲得返回的內(nèi)部函數(shù)對象;

? ? c、使用獲得的內(nèi)部函數(shù)對象,操作受保護的局部變量——唯一途徑;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容