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