首頁  >  文章  >  web前端  >  JavaScript:基礎繼承機制

JavaScript:基礎繼承機制

高洛峰
高洛峰原創
2016-11-25 11:26:30822瀏覽

  我在前一個階段是做Java程式設計的。突然接到任務並學習ASP,所以我一直都很熱情並且善於利用JavaScript來構架ASP程式。
  
  JavaScript的一個明顯的優點就在於它可以定義和持有自己的物件。這一點好像是VBScript所無法比擬的。
  有了這一點,可以利用JavaScript進行更接近於物件導向的程式設計。也許這會讓網站開發更有樂趣...
  
  但有個嚴重的缺點! JavaScript不支援繼承機制。不像Java那樣,支援extends關鍵字(雖然這個關鍵字在JavaScript中是保留字)。
  
  在微軟的ASP.NET中,JavaScript才開始提供比較完善的支援。 PHP語言當然也有繼承機制的支持,這些都叫我垂青...
  
  不過現在我根本無法說服學校的老頭子們買更好的域名空間,但是我也不想忍受ASP中無繼承機制之苦,所以急中生智,也有了一些成果!
  
  JavaScript根本不支援繼承機制!這是肯定的。但是我們可以想辦法做些手腳,模擬一個出來。
廢話說了一堆,先來看一個例子:

  function Person()
  {
  public: // 注意這個public! 其實沒有這樣的用法, 這只是我的習慣. 幸好在實際應用中不會有錯誤
  this.GetName=Person_mfGetName;

  private: // 和public一樣, 這也是我的習慣
  this.m_strName="Guest";
 }

  var MyPerson=new Person();
  MyPerson.GetName();

  你可以用任何輸出語句來檢視結果。當然這只是第一步!

  以下是關鍵一步:繼承!


  function Student() // Extends Class: Person

  { 

  EXTENDS: // 我的習慣, 但要切記不能使用小寫字母. 因為extends是JavaScript指向中的保留字
  this.Super=Person; // 定義中的保留字

  this.Super=Person;其"父類建構器". 這裡的Super也不能用小寫形式

  this.Super(); // 呼叫其"父類構造器". 這樣就可以從"父類"那裡"繼承"所有的屬性和方法

  private:
  this.m_nStudentID=0;
  }

  雖然在Student中並沒有看到GetName()方法,但是卻可以呼叫。因為他已經繼承了Person的GetName()方法。

  var MyStudent=new Student();

  MyStudent.GetName(); // 注意, 呼叫的是其"父類別"的GetName方法, 結果為回傳 "Guest".

    、實作就是這樣。只要牢記兩步驟:
  

  1: 在"子類別"中先定義一個指向"父類"的函數(什麼名字都可以,我習慣使用Super)

  2: 隨後調用這個函數
  父類別"的所有屬性和方法!



陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn