1. 程式人生 > >面向對象OOP

面向對象OOP

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