溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript中面向對象技術的模擬方法

發布時間:2021-07-13 14:41:50 來源:億速云 閱讀:116 作者:chen 欄目:編程語言

這篇文章主要介紹“JavaScript中面向對象技術的模擬方法”,在日常操作中,相信很多人在JavaScript中面向對象技術的模擬方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”JavaScript中面向對象技術的模擬方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

在C#和Java語言中,面向對象是以類的方式實現的,特別是繼承這個特性,類的方式繼承表現出了強大的功能,而且也易于學習。JavaScript不是純的面向對象的語言,而是基于對象的語言,對象的繼承是以原型函數的形式繼承的,很多初學者剛開始接觸的時候不太理解,但是JavaScript這種以原型函數的形式實現面向對象技術,不僅是可行的,而且還為面向對象技術提供了動態繼承的功能,本文主要討論了JavaScript的面向對象技術。

原型對象概述

每個JavaScript對象都有原型對象,對象都繼承原型對象的所有屬性。一個對象的原型是由創建該對象的構造函數定義的。JavaScript的所有函數都有一個名為prototype的屬性,該屬性引用了原型對象,該原型對象初始化的時候只有constructor屬性來引用創建該原型對象的對象。JavaScript沒有Class定義類的概念,構造函數就定義了類,并初始化類中的屬性,每個類的成員都會從原型對象中繼承相同的屬性,也就是說,原型對象提供了類的實例共享的屬性和方法,這就節約了內存。

當讀取一個對象的屬性的時候,JavaScript會先從對象中查找,如果沒有查找到,才會到原型對象中查找該屬性(或方法),所以,尤其是對于方法,***保存到原型對象中以便于共享,并且達到節省內存的目的,而且原型對象還有一個強大的功能,那就是如果通過構造函數實例化一些對象后,再給構造函數的原型對象增加屬性和方法,那么它原來實例化的對象實例將會繼承這些增加的屬性和方法。

對象屬性、對象方法、類屬性、類方法

每個對象都會有自己單獨的實例屬性和實例方法的副本,如果實例化5個對象,那么就會有5個對象的實例屬性和實例方法副本。This關鍵字引用它們的實例對象,也就是說,誰操作了實例方法,this就引用誰;訪問了哪個實例對象的屬性,this就引用這個實例對象。

類方法和類屬性只有一個副本,類方法調用的時候必須引用類的名字,例如:Date.setHours();

下面用一個程序來表現實例屬性、實例方法、類屬性、類方法

function Mobile(kind,brand) {       this.kind=kind;//定義手機的種類,例如GSM/CDMA       this.brand=brand;//定義手機的品牌,this關鍵字表示用該構造函數實例化之后的對象   }    /**//*   定義類的第二步是在構造函數的原型對象中定義它的實例方法或其他屬性   該對象定義的任何屬性都將這個類的所有實例繼承。    */  //撥號,這里只是返回電話號碼   Mobile.prototype.dial = function(phoneNo) {       return phoneNo;   };     /**//*

定義類的第三步是定義類方法,常量和其他必要的類屬性,作為構造函數自身的屬性,而不是構造函數

原型對象的屬性,注意,類方法沒有使用關鍵字this,因為他們只對他們的實際參數進行操作。

*/   //開機關機方法   Mobile.turnOn=function() {      return "The power of mobile is on";   }   Mobile.turnOff=function() {      return "The power of mobile is off";   }     //類屬性,這樣他們就可以被用作常量,注意實際上他們并不是只讀的   Mobile.screenColor=64K;//假設該類手機的屏幕顏色都是64K彩屏的

子類化

JavaScript支持子類化,只需把子類的原型對象用超類實例化即可,但是應該注意,這樣子類化之后就會存在一個問題,由于是用超類實例化子類的原型對象取得的,所以就沖掉了自己本身的由JavaScript提供的constructor屬性,為了確保constructor的正確性,需要重新指定一下,子類化的程序例子如下:

 /*****  子類化  *****/  //下面是子類構造函數智能型手機   function SmartPhone(os)   {     this.os=os;       }   //我們將Mobile對象作為它的原型   //這意味著新類的實例將繼承SmartPhone.prototype,   //后者由Mobile.prototype繼承而來   //Mobile.prototype又由Object.prototype繼承而來   SmartPhone.prototype=new Mobile(GSM,Nokia);   //下面給子類添加一個新方法,發送電子郵件,這里只是返回Email地址   SmartPhone.prototype.sendEmail=function(emailAddress) {     return this.emailAddress   }   //上面的子類化方法有一點缺陷,由于我們明確把SmartPhone.prototype設成了我們所創建的一個對象,所以就覆蓋了JS提供   //的原型對象,而且丟棄了給定的Constructor屬性。該屬性引用的是創建這個對象的構造函數。但是SmartPhone對象集成了它的   //父類的constructor,它自己沒有這個屬性,明確設置著一個屬性可以解決這個問題:   SmartPhone.prototype.constructor=SmartPhone;   var objSmartPhone=new SmartPhone();//實例化子類

到此,關于“JavaScript中面向對象技術的模擬方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女