面向對象OOP
阿新 • • 發佈:2018-04-10
bject 直接 構造 默認 創建 什麽是對象 存儲 訪問 數列
什麽是: 程序中都是先用對象來定義數據和功能,再按照邏輯的需要,訪問對象中的數據和功能。
為什麽: 和現實中人的想法非常接近。
什麽是對象:
內存中同時存儲多個數據和功能的存儲空間
描述現實中一個具體事物的屬性和功能的程序結構
事物的屬性,會成為對象中的屬性
事物的功能,會成為對象中的方法
何時: 今後開始寫程序前,都要先用對象,描述好要操作的事物的屬性和功能,再按需使用對象的功能,訪問對象的屬性
如何: 面向對象三大特點: 封裝,繼承,多態
封裝: 將一個具體事物的屬性和功能集中定義在一個對象中
創建自定義對象: ——封裝 3種:
1. 使用對象直接量:
var obj={
屬性名: 屬性值,
... : ... ,
方法名: function(){... this.屬性名 ...},
... : ... ,
}
強調: 對象自己的方法,要訪問自己的屬性,必須用this.屬性名.
this->正在調用函數的當前對象自己
2. 使用new: 2步:
var obj=new Object(); //創建一個空對象
//向空對象中添加屬性和方法
obj.屬性名=屬性值;
obj.方法名=function(){...this.屬性名...};
對象的本質: js中一切對象的底層都是關聯數組
每個屬性/方法都是關聯數組中的元素
屬性名/方法名是key,屬性值/函數對象是value
問題: 一次只能創建一個對象
3. 解決: 用構造函數:
什麽是構造函數: 專門描述一類對象統一結構的函數
何時: 今後只要反復創建多個相同結構的對象時,都要先定義構造函數
為什麽: 復用對象的結構代碼
如何: 2步:
1. 定義構造函數
function 類型名(屬性參數列表){
this.屬性名=屬性參數值;
...=...;
this.方法名=function(){ ... this.屬性名 ... }
}
2. 用new調用構造函數,創建並裝修新對象
var obj=new 類型名(屬性值列表);
創建一個指定“類型”的對象
用new調用指定"類型"的構造函數來創建對象
new: 4件事:
1. 創建新的空對象
2. 讓新對象繼承構造函數的原型對象
3. 用新對象去調用構造函數
向新對象中添加構造函數規定的屬性
將屬性參數的值,保存到新對象的新屬性中
向新對象中添加構造函數規定的方法
4. 將新對象的地址保存在變量
按需訪問對象的屬性,調用對象的方法:
訪問對象的屬性: obj.屬性名 用法和普通的變量完全一樣
屬性就是保存在對象中的一個變量
調用對象的方法: obj.方法名() 用法和普通的函數完全一樣
強調: 方法中的this,默認指.前的對象
構造函數的問題: 只能復用代碼,不能節約內存
繼承: 父對象的成員,子對象不用重復創建,也可直接使用
為什麽: 即節約內存,又代碼重用
何時: 只要一類子對象,需要相同的屬性或功能時,都要將相同的屬性和功能僅在父對象中定義一次即可
如何:
原型對象: 集中存儲同一類型的子對象所需的所有共有屬性和方法的父對象
面向對象OOP