熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Javascript >> 正文

JavaScript中面向對象技術的模擬

2013-11-23 17:52:35  來源: Javascript 
引言
  在C#和Java語言中面向對象是以類的方式實現的特別是繼承這個特性類的方式繼承表現出了強大的功能而且也易於學習JavaScript不是純的面向對象的語言而是基於對象的語言對象的繼承是以原型函數的形式繼承的很多初學者剛開始接觸的時候不太理解但是JavaScript這種以原型函數的形式實現面向對象技術不僅是可行的而且還為面向對象技術提供了動態繼承的功能本文主要討論了JavaScript的面向對象技術
原型對象概述
  每個JavaScript對象都有原型對象對象都繼承原型對象的所有屬性一個對象的原型是由創建該對象的構造函數定義的JavaScript的所有函數都有一個名為prototype的屬性該屬性引用了原型對象該原型對象初始化的時候只有constructor屬性來引用創建該原型對象的對象JavaScript沒有Class定義類的概念構造函數就定義了類並初始化類中的屬性每個類的成員都會從原型對象中繼承相同的屬性也就是說原型對象提供了類的實例共享的屬性和方法這就節約了內存
  當讀取一個對象的屬性的時候JavaScript會先從對象中查找如果沒有查找到才會到原型對象中查找該屬性(或方法)所以尤其是對於方法最好保存到原型對象中以便於共享並且達到節省內存的目的而且原型對象還有一個強大的功能那就是如果通過構造函數實例化一些對象後再給構造函數的原型對象增加屬性和方法那麼它原來實例化的對象實例將會繼承這些增加的屬性和方法
對象屬性對象方法類屬性類方法
  每個對象都會有自己單獨的實例屬性和實例方法的副本如果實例化個對象那麼就會有個對象的實例屬性和實例方法副本This關鍵字引用它們的實例對象也就是說誰操作了實例方法this就引用誰訪問了哪個實例對象的屬性this就引用這個實例對象
  類方法和類屬性只有一個副本類方法調用的時候必須引用類的名字例如DatesetHours();
  下面用一個程序來表現實例屬性實例方法類屬性類方法
 function Mobile(kindbrand) {
      thiskind=kind;//定義手機的種類例如GSM/CDMA
      thisbrand=brand;//定義手機的品牌this關鍵字表示用該構造函數實例化之後的對象
  }
  
  /**//*
   定義類的第二步是在構造函數的原型對象中定義它的實例方法或其他屬性
   該對象定義的任何屬性都將這個類的所有實例繼承
  
   */
   //撥號這裡只是返回電話號碼
  Mobileprototypedial = function(phoneNo) {
      return phoneNo;
  };
  
  
  /**//*
   定義類的第三步是定義類方法常量和其他必要的類屬性作為構造函數自身的屬性而不是構造函數
   原型對象的屬性注意類方法沒有使用關鍵字this因為他們只對他們的實際參數進行操作
   */
  //開機關機方法
  MobileturnOn=function() {
     return The power of mobile is on;
  }
  MobileturnOff=function() {
     return The power of mobile is off;
  }
  
  
  //類屬性這樣他們就可以被用作常量注意實際上他們並不是只讀的
  MobilescreenColor=K;//假設該類手機的屏幕顏色都是K彩屏的
子類化
   JavaScript支持子類化只需把子類的原型對象用超類實例化即可但是應該注意這樣子類化之後就會存在一個問題由於是用超類實例化子類的原型對象取得的所以就沖掉了自己本身的由JavaScript提供的constructor屬性為了確保constructor的正確性需要重新指定一下子類化的程序例子如下
   /*****  子類化  *****/
//下面是子類構造函數智能型手機
function SmartPhone(os)
{
  thisos=os;
 
}
//我們將Mobile對象作為它的原型
//這意味著新類的實例將繼承SmartPhoneprototype
//後者由Mobileprototype繼承而來
//Mobileprototype又由Objectprototype繼承而來
SmartPhoneprototype=new Mobile(GSMNokia);
//下面給子類添加一個新方法發送電子郵件這裡只是返回Email地址
SmartPhoneprototypesendEmail=function(emailAddress) {
  return thisemailAddress
}
//上面的子類化方法有一點缺陷由於我們明確把SmartPhoneprototype設成了我們所創建的一個對象所以就覆蓋了JS提供
//的原型對象而且丟棄了給定的Constructor屬性該屬性引用的是創建這個對象的構造函數但是SmartPhone對象集成了它的
//父類的constructor它自己沒有這個屬性明確設置著一個屬性可以解決這個問題
Smarnstructor=SmartPhone;
var objSmartPhone=new SmartPhone();//實例化子類
From:http://tw.wingwit.com/Article/program/Java/Javascript/201311/25261.html
  • 上一篇文章:

  • 下一篇文章:
  • Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.