OOP面向对象
什么是:程序中都是用對象結(jié)構(gòu)來描述現(xiàn)實中的事物
為什么:便于大量數(shù)據(jù)的維護
何時:所有程序都是面向?qū)ο蟮乃枷牍芾頂?shù)據(jù)和功能
如何使用面向?qū)ο缶幊?/strong>:面向?qū)ο笕筇攸c:封裝,繼承,多態(tài)
一、封裝:
什么是:創(chuàng)建一個對象結(jié)構(gòu),保存一個事物的屬性和功能
為什么:便于大量數(shù)據(jù)的維護
何時:今年所有數(shù)據(jù)都是先封裝在對象中,再按需使用
如何:3種:
1. 用{}創(chuàng)建一個對象:
var 對象名={屬性:屬性值,...:...,功能(即方法):function(){ 值是一個function...this.屬性名...} }訪問對象的成員:成員 = 屬性 + 方法
訪問屬性:對象名.屬性
調(diào)用方法:對象名.方法()
問題:對象自己的方法內(nèi),想訪問自己的屬性,也不能直接屬性:報錯:屬性 未定義
為什么:對象的屬性沒有直接保存在一個函數(shù)的作用域鏈中,而引擎不能擅自進入對象中獲取數(shù)據(jù)。
解決一:對象名.屬性/方法
問題:緊耦合:對象名發(fā)生變化,必須同時改內(nèi)部的對象名,一旦忘性,就出錯!
解決二:松耦合:能不能自動獲得對象名——this
什么是this:正在調(diào)用當前函數(shù)的.前的對象
每個函數(shù)與生俱來的關(guān)鍵詞,可自動獲取.前的對象
筆試時:this只和調(diào)用時.前的對象有關(guān),和保存在哪兒毫無關(guān)系!
如果一個函數(shù)前沒加任何.,默認是window
總結(jié):何時:只要對象自己的方法內(nèi),想使用對象自己的屬性和其它方法時,都必須用this.
2. 用new創(chuàng)建一個對象
var obj = new Object(); //創(chuàng)建的obj:{}是一個空數(shù)組 obj.屬性值 = 值; obj.方法名 = function(){ ... }var lilei = {sname: "Li Lei",sage: 11 }揭示了:js底層所有對象都是關(guān)聯(lián)數(shù)組
vs 關(guān)聯(lián)數(shù)組相比:
相同:1. js中的對象,可隨時添加新屬性和新方法,而不會報錯!
2.訪問對象中不存在的屬性,不會報錯,而是返回undefined
3.訪問對象中的成員,有兩種方式:
簡寫:對象名.屬性名/方法名()
// ||等效
何時用.(點):如果要訪問的屬性名是寫死的
完整:對象名[“屬性名”]/“方法名”
何時用[]:如果要訪問的屬性只能在運行時動態(tài)獲得
4.對象也可以用for in 遍歷每個屬性
自己記錄:不加this.,是以變量形式訪問,變量不存在,就會的報錯
總結(jié)
- 上一篇: 某音无水印视频
- 下一篇: 如何减少手机辐射?——七招减少手机对您的