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