淺析AJAX中JavaScript類的三種成員_AJAX教程
教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!
推薦:揭秘AJAX將成為移動(dòng)Web2.0時(shí)代首選開發(fā)平臺(tái)一、 引言 最近,Opera宣布通過(guò)他們的瀏覽器把AJAX技術(shù)應(yīng)用于移動(dòng)設(shè)備開發(fā)中�?紤]到Opera瀏覽器在目前瀏覽器市場(chǎng)(特別是在移動(dòng)瀏覽器市場(chǎng))的流行性,我們可以預(yù)計(jì)這一宣布對(duì)于整個(gè)瀏覽器市場(chǎng)必然會(huì)產(chǎn)生重要影響。從加入到移動(dòng)服務(wù)開發(fā)市場(chǎng)幾年的經(jīng)驗(yàn)來(lái)看,我
實(shí)現(xiàn)類的公有成員前面定義的任何類成員都屬于公有成員的范疇,該類的任何實(shí)例都對(duì)外公開這些屬性和方法。
實(shí)現(xiàn)類的私有成員
私有成員即在類的內(nèi)部實(shí)現(xiàn)中可以共享的成員,不對(duì)外公開。JavaScript中并沒(méi)有特殊的機(jī)制來(lái)定義私有成員,但可以用一些技巧來(lái)實(shí)現(xiàn)這個(gè)功能。
這個(gè)技巧主要是通過(guò)變量的作用域性質(zhì)來(lái)實(shí)現(xiàn)的,在JavaScript中,一個(gè)函數(shù)內(nèi)部定義的變量稱為局部變量,該變量不能夠被此函數(shù)外的程序所訪問(wèn),卻可以被函數(shù)內(nèi)部定義的嵌套函數(shù)所訪問(wèn)。在實(shí)現(xiàn)私有成員的過(guò)程中,正是利用了這一性質(zhì)。
前面提到,在類的構(gòu)造函數(shù)中可以為類添加成員,通過(guò)這種方式定義的類成員,實(shí)際上共享了在構(gòu)造函數(shù)內(nèi)部定義的局部變量,這些變量就可以看作類的私有成員,例如:
<script language="JavaScript" type="text/javascript">
<!--
function class1(){
var pp=" this is a private property"; //私有屬性成員pp
function pm(){ //私有方法成員pm,顯示pp的值
alert(pp);
}
this.method1=function(){
//在公有成員中改變私有屬性的值
pp="pp has been changed";
}
this.method2=function(){
pm(); //在公有成員中調(diào)用私有方法
}
}
var obj1=new class1();
obj1.method1(); //調(diào)用公有方法method1
obj1.method2(); //調(diào)用公有方法method2
//-->
</script>
<!--
function class1(){
var pp=" this is a private property"; //私有屬性成員pp
function pm(){ //私有方法成員pm,顯示pp的值
alert(pp);
}
this.method1=function(){
//在公有成員中改變私有屬性的值
pp="pp has been changed";
}
this.method2=function(){
pm(); //在公有成員中調(diào)用私有方法
}
}
var obj1=new class1();
obj1.method1(); //調(diào)用公有方法method1
obj1.method2(); //調(diào)用公有方法method2
//-->
</script>
這樣,就實(shí)現(xiàn)了私有屬性pp和私有方法pm。運(yùn)行完class1以后,盡管看上去pp和pm這些局部變量應(yīng)該隨即消失,但實(shí)際上因?yàn)閏lass1是通過(guò)new來(lái)運(yùn)行的,它所屬的對(duì)象還沒(méi)消失,所以仍然可以通過(guò)公開成員來(lái)對(duì)它們進(jìn)行操作。
注意:這些局部變量(私有成員),被所有在構(gòu)造函數(shù)中定義的公有方法所共享,而且僅被在構(gòu)造函數(shù)中定義的公有方法所共享。這意味著,在prototype中定義的類成員將不能訪問(wèn)在構(gòu)造體中定義的局部變量(私有成員)。
要使用私有成員,是以犧牲代碼可讀性為代價(jià)的。而且這種實(shí)現(xiàn)更多的是一種JavaScript技巧,因?yàn)樗⒉皇钦Z(yǔ)言本身具有的機(jī)制。但這種利用變量作用域性質(zhì)的技巧,卻是值得借鑒的。
實(shí)現(xiàn)靜態(tài)成員
靜態(tài)成員屬于一個(gè)類的成員,它可以通過(guò)“類名.靜態(tài)成員名”的方式訪問(wèn)。在JavaScript中,可以給一個(gè)函數(shù)對(duì)象直接添加成員來(lái)實(shí)現(xiàn)靜態(tài)成員,因?yàn)楹瘮?shù)也是一個(gè)對(duì)象,所以對(duì)象的相關(guān)操作,對(duì)函數(shù)同樣適用。例如:
function class1(){//構(gòu)造函數(shù)
}
//靜態(tài)屬性
class1.staticProperty="sample";
//靜態(tài)方法
class1.staticMethod=function(){
alert(class1.staticProperty);
}
//調(diào)用靜態(tài)方法
class1.staticMethod();
}
//靜態(tài)屬性
class1.staticProperty="sample";
//靜態(tài)方法
class1.staticMethod=function(){
alert(class1.staticProperty);
}
//調(diào)用靜態(tài)方法
class1.staticMethod();
通過(guò)上面的代碼,就為類class1添加了一個(gè)靜態(tài)屬性和靜態(tài)方法,并且在靜態(tài)方法中引用了該類的靜態(tài)屬性。
如果要給每個(gè)函數(shù)對(duì)象都添加通用的靜態(tài)方法,還可以通過(guò)函數(shù)對(duì)象所對(duì)應(yīng)的類Function來(lái)實(shí)現(xiàn),例如:
//給類Function添加原型方法:show ArgsCount
Function.prototype.showArgsCount=function(){
alert(this.length); //顯示函數(shù)定義的形參的個(gè)數(shù)
}
function class1(a){
//定義一個(gè)類
}
//調(diào)用通過(guò)Function的prototype定義的類的靜態(tài)方法showArgsCount
class1. showArgsCount ();
由此可見(jiàn),通過(guò)Function的prototype原型對(duì)象,可以給任何函數(shù)都加上通用的靜態(tài)成員,這在實(shí)際開發(fā)中可以起到很大的作用,比如在著名的prototype-1.3.1.js框架中,就給所有的函數(shù)定義了以下兩個(gè)方法:
這兩個(gè)方法在prototype-1.3.1框架中起了很大的作用,具體含義及用法將在后面章節(jié)介紹。
Function.prototype.showArgsCount=function(){
alert(this.length); //顯示函數(shù)定義的形參的個(gè)數(shù)
}
function class1(a){
//定義一個(gè)類
}
//調(diào)用通過(guò)Function的prototype定義的類的靜態(tài)方法showArgsCount
class1. showArgsCount ();
由此可見(jiàn),通過(guò)Function的prototype原型對(duì)象,可以給任何函數(shù)都加上通用的靜態(tài)成員,這在實(shí)際開發(fā)中可以起到很大的作用,比如在著名的prototype-1.3.1.js框架中,就給所有的函數(shù)定義了以下兩個(gè)方法:
//將函數(shù)作為一個(gè)對(duì)象的方法運(yùn)行
Function.prototype.bind = function(object) {
var __method = this;
return function() {
__method.apply(object, arguments);
}
}
//將函數(shù)作為事件監(jiān)聽(tīng)器
Function.prototype.bindAsEventListener = function(object) {
var __method = this;
return function(event) {
__method.call(object, event || window.event);
}
}
Function.prototype.bind = function(object) {
var __method = this;
return function() {
__method.apply(object, arguments);
}
}
//將函數(shù)作為事件監(jiān)聽(tīng)器
Function.prototype.bindAsEventListener = function(object) {
var __method = this;
return function(event) {
__method.call(object, event || window.event);
}
}
這兩個(gè)方法在prototype-1.3.1框架中起了很大的作用,具體含義及用法將在后面章節(jié)介紹。
來(lái)源:CSDN
分享:如何十分鐘學(xué)會(huì) xajax譯者按: xajax 最大的特點(diǎn)是他采用了xml response,這樣我們可以用php來(lái)布置,處理異步傳送數(shù)據(jù)之后,網(wǎng)頁(yè)內(nèi)容的更新。而這些操作其它的ajax 框架都是由js來(lái)完成的的。xajax 使我們只需要寫一些php函數(shù),就可以實(shí)現(xiàn)。 所有學(xué)好xajax的關(guān)健在于熟練掌握 xajax
相關(guān)AJAX教程:
- Ajax中瀏覽器的緩存問(wèn)題解決方法
- AJAX和WebService實(shí)現(xiàn)省市縣三級(jí)聯(lián)動(dòng)具體代碼
- ajax 登錄功能簡(jiǎn)單實(shí)現(xiàn)(未連接數(shù)據(jù)庫(kù))
- AJAX和WebService實(shí)現(xiàn)郵箱驗(yàn)證(無(wú)刷新驗(yàn)證郵件地址是否合法)
- AJAX和三層架構(gòu)實(shí)現(xiàn)分頁(yè)功能具體思路及代碼
- 使用AJAX返回WebService里的集合具體實(shí)現(xiàn)
- AJAX獲取服務(wù)器當(dāng)前時(shí)間及時(shí)間格式輸出處理
- ajax傳遞多個(gè)參數(shù)具體實(shí)現(xiàn)
- ajax傳遞一個(gè)參數(shù)具體實(shí)現(xiàn)
- 滑輪滾動(dòng)到頁(yè)面底部ajax加載數(shù)據(jù)配合jsonp實(shí)現(xiàn)探討
- jQery ajax——load()方法示例介紹
- jQuery+Ajax實(shí)現(xiàn)表格數(shù)據(jù)不同列標(biāo)題排序(為表格注入活力)
AJAX教程Rss訂閱編程教程搜索
AJAX教程推薦
- 如何用AjaxPro實(shí)現(xiàn)定時(shí)刷新效果
- 談Ajax 中的高級(jí)請(qǐng)求和響應(yīng)
- 如何使用WatiN對(duì)ASP.NET頁(yè)面進(jìn)行單元測(cè)試
- AJAX快速入門之HTTP協(xié)議基礎(chǔ)
- 怎樣用AjaxPro實(shí)現(xiàn)無(wú)刷新翻頁(yè)效果及數(shù)據(jù)庫(kù)分頁(yè)
- Ajax創(chuàng)建XMLHttp對(duì)象的完美兼容性代碼
- 揭秘Ajax 的安全-不容忽視的問(wèn)題
- XMLHTTP組件相關(guān)技術(shù)資料
- 詳解-CSS技巧篇
- 揭秘在AJAX程序中實(shí)現(xiàn)互斥
猜你也喜歡看這些
- 解決ajax緩存的三種方法
- AJAX新手試用篇
- AJAX獲取服務(wù)器當(dāng)前時(shí)間及時(shí)間格式輸出處理
- 如何用AJAX實(shí)現(xiàn)網(wǎng)頁(yè)無(wú)刷新功能
- Ajax與JSON的一些學(xué)習(xí)總結(jié)
- Ajax如何實(shí)現(xiàn)靜態(tài)頁(yè)面分頁(yè)
- 談Ajax 中的高級(jí)請(qǐng)求和響應(yīng)
- jPager一個(gè)適合Ajax+JSON+jQuery環(huán)境使用的多功能頁(yè)碼欄
- adapter和facade模式在Ajax中的應(yīng)用
- 怎樣學(xué)習(xí)AJAX
- 相關(guān)鏈接:
- 教程說(shuō)明:
AJAX教程-淺析AJAX中JavaScript類的三種成員
。