宋文瑞
遼寧錦州渤海大學(xué)信息科學(xué)與技術(shù)學(xué)院
基于JavaScript技術(shù)實現(xiàn)的面向?qū)ο缶幊谭椒?/p>
宋文瑞
遼寧錦州渤海大學(xué)信息科學(xué)與技術(shù)學(xué)院
本文針對JavaScript技術(shù)實現(xiàn)的面向?qū)ο蟮木幊虒崿F(xiàn)方法,JavaScript編程技術(shù)作為一種腳本式函數(shù)語言嵌入到網(wǎng)頁的頁面中,在多年來,JavaScript編程技術(shù)是否具備面向?qū)ο蟮南嚓P(guān)特性和要素,這種軟件編程技術(shù)長期處于具有面向?qū)ο筇匦缘倪吘壭允欠浅D:?,本文通過使用簡單的程序示例,來講述JavaScript編程技術(shù)回歸面向?qū)ο缶幊痰谋疽猓疚膶木幊碳夹g(shù)語法角度講述JavaScript技術(shù)是一種擁有面向?qū)ο筇匦?。JavaScript編程技術(shù)同其他高級語言C++和Java語言在語法上相似,為了深入了解JavaScript對象與函數(shù)是學(xué)習(xí)JavaScript編程技術(shù)的基礎(chǔ)。下面通過分析高級語言的面向?qū)ο蟮膸追N特性:封裝性,繼承性,多態(tài)性,基于JavaScript語言實現(xiàn)的高級語言特性。本文通過JavaScript代碼片段實例,剖析JavaScript技術(shù)在網(wǎng)站開發(fā)中的編程與應(yīng)用,在實際編程中使用JavaScript對象編程進行舉例說明。本文基于JavaScript技術(shù)實現(xiàn)的面向?qū)ο蠓椒ǖ囊恍┨剿?,并給出了相關(guān)分析實例,展示了JavaScript編程技術(shù)在網(wǎng)頁編程中的優(yōu)越性。
JavaScript 面向?qū)ο?編程語言 封裝性 繼承性 多態(tài)性
目前,JavaScript編程技術(shù)是一種面向?qū)ο蠹夹g(shù)開發(fā)的高級編程語言,此高級編程語言可以被嵌入到網(wǎng)頁的頁面的文件里。通過JavaScript編程技術(shù)可以做到響應(yīng)用戶點擊或者觸發(fā)的事件空間(例如:form表單的輸入情況、表單按鈕控件點擊情況),JavaScript編程技術(shù)和Java編程語言很類似,但也有本質(zhì)上的區(qū)別,Java編程語言是一種比JavaScript技術(shù)更加復(fù)雜面向?qū)ο缶幊陶Z言,而JavaScript則是相當(dāng)簡單而且容易了解的編程語言。JavaScript只是注重程序開發(fā)的相關(guān)技巧,所以,許多Java編程語言的很多特性在JavaScript編程技術(shù)中并不支持。
JavaScript編程技術(shù)也是面向?qū)ο筮M行編程的思想。但是,很多程序員并不理解這一點是如何實現(xiàn)面向?qū)ο缶幊痰乃枷搿T贘avaScript編程技術(shù)中的面向?qū)ο蠓譃閮煞N情況:其一情況是可以稱為面向“普通對象”編程的思想,在JavaScript中存在的普通對象,例如:數(shù)字對象、布爾對象、日期對象、Number對象和各種用戶自定義的某個對象(如:方括號、花括號和圓括號)等等。其二情況是稱為面向“方法對象”編程的思想,在編程中通常定義為function函數(shù)。令人奇怪的是:function被稱為方法,它又怎么成為面向的對象編程呢?在JavaScript編程技術(shù)中,function方法確實被當(dāng)成對象來看待。
在傳統(tǒng)面向?qū)ο蟮木幊讨?,存在非常重要的幾個概念,本文將列出其中的兩個概念分別問:類和實例兩個概念。類則定義了相關(guān)事物存在公共的屬性和方法的集合;而實例則表示該類的具體實例對象是如何實現(xiàn)。在高級編程語言中面向?qū)ο缶幊逃腥齻€重要的特性分別為:封裝、繼承和多態(tài)。在JavaScript的編程實踐中,表面上并沒有高級編程語言的全部特性,尤其是:封裝、繼承和多態(tài)三個特性并不存在,而這些優(yōu)良的特性真的不在JS中存在嗎?
由于JavaScript編程語言是基于對象編程OB(Object-Based)實現(xiàn)的,而非面向?qū)ο缶幊蘋O(Object-Oriented)實現(xiàn)的,雖然JavaScript編程技術(shù)并非基于面向?qū)ο缶幊痰姆椒?,但它完全實現(xiàn)一些面向?qū)ο缶幊痰幕咎卣鳌O旅嫱ㄟ^分析高級編程語言的面向?qū)ο蟮膸追N特性:封裝性、繼承性、多態(tài)性是如何在JS中實現(xiàn),下面著重介紹這幾種特性實現(xiàn)過程。
2.1 實現(xiàn)類的聲明過程
在JavaScript編程技術(shù)中,類的實現(xiàn)是基于函數(shù)方式來實現(xiàn)的過程,每個function直接被看成在Java編程中類的定義,這個類中可以定義相關(guān)的屬性或者方法,可以是全局變量或者局部變量,也可以賦初值或者定義一個默認的初值,在JavaScript編程技術(shù)中局部變量視為函數(shù)的成員對象,函數(shù)內(nèi)部定義的函數(shù)可以自身的方法,下面簡單介紹關(guān)于類的聲明方式。通過定義一個動物類,其中包括動物類的屬性和相關(guān)方法,屬性為動物名稱、動物腿的數(shù)量、動物身體上顏色、動物生活區(qū)域等等,相關(guān)方法主要包括動物能夠?qū)崿F(xiàn)“跑”的動作、能夠?qū)崿F(xiàn)“吃肉”的動作。
Var 名稱;//定義一個全局的動物名稱變量
Var 腿數(shù)量; //定義一個全局的動物腿數(shù)量變量
Var 顏色; //定義一個全局的動物身上的顏色變量
Var 生活區(qū)域; //定義一個全局的動物生活區(qū)域的變量
Function 動物{//定義一個動物類,名稱為動物
This.名稱=”老虎”;//初始化動物名稱變量值
This.腿數(shù)量 =”4”; //初始化動物腿數(shù)量變量值
This.顏色=”黃色”; //初始化動物動物身上顏色變量值
This.生活區(qū)域=”森林中”; //初始化動物動物生活區(qū)域變量值
This.eat=function(){alert(”表示該動物能吃肉!”);}//函數(shù)表示該動物能吃肉
}
從上面的這段代碼片段可以看出,動物類已經(jīng)定義了名稱、腿數(shù)量、顏色和生活區(qū)域四個與之相關(guān)的屬性,并在此類中定義了一個屬于該類的成員方法eat(),在函數(shù)外部的調(diào)用某個類的屬性時使用點”.”操作符,上面的代碼中名稱、腿數(shù)量、顏色和生活區(qū)域四個變量是公有的成員變量,那么在在JavaScript中能否定義私有成員變量呢?下面看這段代碼片段。
Function 動物{
Var 動物昵稱=”私有變量”; //這里定義很多的私有變量
This.名稱=”老虎”; //定義一個局部的動物名稱變量
This.腿數(shù)量 =”4”; //定義一個局部的動物腿數(shù)量變量
This.顏色=”黃色”; //定義一個局部的動物身上的顏色變量
This.生活區(qū)域=”森林中”; //初始化動物動物生活區(qū)域變量值
This.eat=function(){alert(”表示該動物能吃肉!”);} //函數(shù)表示該動物能吃肉
}
在上面的代碼中,Var動物昵稱=“私有變量”;則表示為該類中的私有成員變量,并且只在動物類中起到引用的作用,并不被外部的程序或者類所使用,僅僅屬于該類自己的變量。因此,在JavaScript中可以通過定義類中局部變量成為私有變量。
2.2 JavaScript中實現(xiàn)的構(gòu)造函數(shù)
在JavaScript編程技術(shù)中,構(gòu)造函數(shù)是為了實現(xiàn)對象的變量值初始化操作的功能,通過this變量和點“·”操作符實現(xiàn)構(gòu)造函數(shù)的變量初始化操作,并且將變量值賦給某個對象的某個屬性,在編程語言中我們可以通過參考下面的代碼片段實現(xiàn)構(gòu)造函數(shù),使對象的變量進行初始化操作。
Function 動物(名稱,腿數(shù)量,顏色){//定義一個動物類構(gòu)造函數(shù),含有三個參數(shù)分別是動物名稱、動物腿數(shù)量、動物身上顏色
This.名稱= 名稱; //通過動物類構(gòu)造函數(shù)對動物名稱的變量賦初值
This.腿數(shù)量 =腿數(shù)量; //通過動物類構(gòu)造函數(shù)對動物腿數(shù)量的變量賦初值
This.顏色=顏色; //通過動物類構(gòu)造函數(shù)對動物身上顏色的變量賦初值
}
上面的這個代碼片段實現(xiàn)了在高級語言中的構(gòu)造函數(shù),為了某個類中的部分變量的初始化操作。
2.3 JavaScript中創(chuàng)建實例對象
通過JavaScript編程技術(shù)中創(chuàng)建某個類的實例化對象,下面通過創(chuàng)建幾個不同的動物類對象的實例化,下面的定義方式為創(chuàng)建某個類的實例化對象:
Var 老虎=new 動物(”老虎”,”4”,”黃色”);
Var 華南老虎 =new 動物(”華南老虎”,”4”,”黃白相間”);
上面的代碼是通過函數(shù)方式實現(xiàn)對象的實例化和封裝,通過JavaScript編程技術(shù)中創(chuàng)建某個類的實例化對象。
本節(jié)中講述的繼承性是指子類繼承父類的屬性或者方法,在子類中無需編寫與父類相同的代碼,在JavaScript中并沒有支持繼承的語法作支持,但是有一種方式可以通過隱式方式實現(xiàn)繼承,如果要實現(xiàn)繼承,簡單的方式是通過apply方法實現(xiàn)類之間的繼承性,將父類對象賦給子類對象上,即可實現(xiàn)子類對象中增加一處代碼即可實現(xiàn),如下面的所示代碼片段實現(xiàn)類與類之間的繼承性。
Function 狗類(名稱,腿數(shù)量){
動物.apply(this,顏色);//將父類對象賦給子類對象中;
This.名稱= 名稱;//子類對象通過繼承父類參數(shù)對子類進行賦值
This.腿數(shù)量 =腿數(shù)量;
}
本節(jié)中講述的多態(tài)性是在類中允許出現(xiàn)多個相同或者相似的函數(shù)名稱,構(gòu)造成幾個表面上十分相似的函數(shù)名稱,但是,存在某些細微的差別之處,差別在于函數(shù)的參數(shù)個數(shù)、參數(shù)類型、函數(shù)的實現(xiàn)功能是不同的,如何在JavaScript編程技術(shù)中實現(xiàn)多態(tài),有下面的幾種實現(xiàn)方式:重載和覆蓋。重載是根據(jù)在類中允許存在多個相似名稱的函數(shù),而這些函數(shù)參數(shù)類型、個數(shù)或者返回值不同而已,或者參數(shù)和返回值都不同,只是看是相似而本質(zhì)上并不相似。通過下面的代碼片段認識一下如何在JavaScript中實現(xiàn)多態(tài)性。
Function 動物(名稱){This.名稱= 名稱;}
//含有一個參數(shù)動物類的構(gòu)造函數(shù),并通過動物類構(gòu)造函數(shù)對動物名稱的變量賦初值
Function 動物(名稱,腿數(shù)量){This.名稱= 名稱;This.腿數(shù)量 =腿數(shù)量;}
//含有兩個參數(shù)動物類的構(gòu)造函數(shù),并通過動物類構(gòu)造函數(shù)對動物名稱的變量和動物腿數(shù)變量的初值
Function 動物(名稱,腿數(shù)量,顏色){This.名稱= 名稱;
This.腿數(shù)量 =腿數(shù)量;This.顏色=顏色;}
//含有三個參數(shù)動物類的構(gòu)造函數(shù),并通過動物類構(gòu)造函數(shù)對動物名稱的變量、動物腿數(shù)變量、動物身上顏色變量的初值
Function 主函數(shù)(){
動物(“老虎”); //此處調(diào)用帶有一個參數(shù)的動物類的構(gòu)造函數(shù),參數(shù)為“老虎”
動物(“老虎”,”4”); //此處調(diào)用帶有兩個參數(shù)的動物類的構(gòu)造函數(shù),參數(shù)為“老虎”,“4”
動物(“老虎”,”4”,”黃色”) //此處調(diào)用帶有三個參數(shù)的動物類的構(gòu)造函數(shù),參數(shù)為“老虎”,“4”,“黃色”
}
上述的偽代碼片段顯示,實現(xiàn)了多個參數(shù)不同的函數(shù)動物類(名稱)、動物類(名稱,腿數(shù)量)、動物類(名稱,腿數(shù)量,顏色),動物類則是需要函數(shù)重載方式,總之,在JavaScript編程技術(shù)中實現(xiàn)函數(shù)重載是根據(jù)程序員自身定義形成一種重載方式,下面通過覆蓋的方式實現(xiàn)某類對象的多態(tài)性的具體實例,對于在網(wǎng)頁的網(wǎng)頁中重寫關(guān)閉當(dāng)前網(wǎng)頁函數(shù)的代碼片段如下所示:
Function 關(guān)閉當(dāng)前網(wǎng)頁函數(shù)(){
Alert(“是否關(guān)閉當(dāng)前網(wǎng)頁,如果確定關(guān)閉網(wǎng)頁,請點擊是,否則點擊否?”);
}
上述代碼片段實現(xiàn)了對當(dāng)前網(wǎng)頁的網(wǎng)頁中“關(guān)閉當(dāng)前網(wǎng)頁函數(shù)”的重寫功能,在JavaScript編程語言特性中,已經(jīng)存在“關(guān)閉當(dāng)前網(wǎng)頁函數(shù)()”,在這里再次對關(guān)閉函數(shù)進行重寫操作,而并沒有使用系統(tǒng)自帶的函數(shù),這是對系統(tǒng)內(nèi)自帶函數(shù)的一種補充和完善操作。
從論文中面向?qū)ο蟮目傮w描述,JavaScript編程技術(shù)是一種的基于對象實現(xiàn)的編程方式,它擁有屬于自己的對象方法,但是,可以通過一定方式將JavaScript編程技術(shù)實現(xiàn)面向?qū)ο缶幊痰姆椒?。對象中還可以包含其它對象。在JavaScript2.0編程技術(shù)之前并沒有基于類的方式實現(xiàn)繼承性,它只是基于對象的某種方式實現(xiàn)軟件編程的特性,它與傳統(tǒng)的面向?qū)ο笙啾榷?,JavaScript編程語言有其本身的特性,它不但能實現(xiàn)面向?qū)ο蠡咎卣髦?,而且在軟件編程實踐過程中具有更大的靈活性,JavaScript編程語言在網(wǎng)頁頁面的作用將會大有可為。
[1][英]Jeremy Keith.楊濤譯.JavaScriptDOM編程藝術(shù)[M].人民郵電出版社
[2][德]Christian Heilmann.牛海彬譯.深入淺出JavaScript,[M].人民郵電出版社
[3]盧云鵬,等.JavaScript深度剖析(第2版)[M].北京:北京大學(xué)出版社,2004
[4]薛曉冬.JavaScript中函數(shù)與對象的解析[M].電腦編程技巧與維護,2009.11
[5]盧云鵬,等.JavaScript深度剖析(第2版)[M].北京:北京大學(xué)出版社,2004