日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

AJAX中JavaScript支持面向?qū)ο蟮幕A(chǔ)_AJAX教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:揭秘在AJAX程序中實(shí)現(xiàn)互斥
隨著AJAX范例得到越來越廣泛的應(yīng)用,瀏覽器頁面可以在向后臺(tái)服務(wù)器請(qǐng)求數(shù)據(jù)的同時(shí)保持前端用戶界面的活躍性(因此在AJAX中稱為異步)。然而,當(dāng)這兩個(gè)活動(dòng)同時(shí)訪問共用的JavaScript和DOM數(shù)據(jù)結(jié)構(gòu)時(shí)就會(huì)引發(fā)問題。JavaScript沒有提供針對(duì)該并發(fā)程序問題的經(jīng)典

 在面向?qū)ο蟮乃枷胫�,最核心的概念之一就是類。一個(gè)類表示了具有相似性質(zhì)的一類事物的抽象,通過實(shí)例化一個(gè)類,可以獲得屬于該類的一個(gè)實(shí)例,即對(duì)象。

  在JavaScript中定義一個(gè)類的方法如下:

function class1(){
 //類成員的定義及構(gòu)造函數(shù)
}

  這里class1既是一個(gè)函數(shù)也是一個(gè)類�?梢詫⑺斫鉃轭惖臉�(gòu)造函數(shù),負(fù)責(zé)初始化工作。

  使用new操作符獲得一個(gè)類的實(shí)例

  在前面介紹基本對(duì)象時(shí),已經(jīng)用過new操作符,例如:

new Date();

  表示創(chuàng)建一個(gè)日期對(duì)象,而Date就是表示日期的類,只是這個(gè)類是由JavaScript內(nèi)部提供的,而不是由用戶定義的。

  new操作符不僅對(duì)內(nèi)部類有效,對(duì)用戶定義的類也同樣有效,對(duì)于上節(jié)定義的class1,也可以用new來獲取一個(gè)實(shí)例:

function class1(){
 //類成員的定義及構(gòu)造函數(shù)
}
var obj1=new class1();

  拋開類的概念,從代碼的形式上來看,class1就是一個(gè)函數(shù),那么是不是所有的函數(shù)都可以用new來操作呢?是的,在JavaScript中,函數(shù)和類就是一個(gè)概念,當(dāng)對(duì)一個(gè)函數(shù)進(jìn)行new操作時(shí),就會(huì)返回一個(gè)對(duì)象。如果這個(gè)函數(shù)中沒有初始化類成員,那就會(huì)返回一個(gè)空的對(duì)象。例如:

//定義一個(gè)hello函數(shù)
function hello(){
 alert("hello");
}
//通過new一個(gè)函數(shù)獲得一個(gè)對(duì)象
var obj=new hello();
alert(typeof(obj));


  從運(yùn)行結(jié)果看,執(zhí)行了hello函數(shù),同時(shí)obj也獲得了一個(gè)對(duì)象的引用。當(dāng)new一個(gè)函數(shù)時(shí),這個(gè)函數(shù)就是所代表類的構(gòu)造函數(shù),其中的代碼被看作為了初始化一個(gè)對(duì)象。用于表示類的函數(shù)也稱為構(gòu)造器。

  使用方括號(hào)([ ])引用對(duì)象的屬性和方法

  在JavaScript中,每個(gè)對(duì)象可以看作是多個(gè)屬性(方法)的集合,引用一個(gè)屬性(方法)很簡(jiǎn)單,如:

  對(duì)象名.屬性(方法)名

  還可以用方括號(hào)的形式來引用:

  對(duì)象名["屬性(方法)名"]

  注意,這里的方法名和屬性名是一個(gè)字符串,不是原先點(diǎn)(? )號(hào)后面的標(biāo)識(shí)符,例如:

 

var arr=new Array();
//為數(shù)組添加一個(gè)元素
arr["push"]("abc");
//獲得數(shù)組的長(zhǎng)度
var len=arr["length"];
//輸出數(shù)組的長(zhǎng)度
alert(len);


圖1

  圖1顯示了執(zhí)行的結(jié)果。

  由此可見,上面的代碼等價(jià)于:

var arr=new Array();
//為數(shù)組添加一個(gè)元素
arr.push("abc");
//獲得數(shù)組的長(zhǎng)度
var len=arr.length;
//輸出數(shù)組的長(zhǎng)度
alert(len);

  這種引用屬性(方法)的方式和數(shù)組類似,體現(xiàn)了JavaScript對(duì)象就是一組屬性(方法)的集合這個(gè)性質(zhì)。

  這種用法適合不確定具體要引用哪個(gè)屬性(方法)的情況,例如:一個(gè)對(duì)象用于表示用戶資料,用一個(gè)字符串表示要使用的那個(gè)屬性,就可以用這種方式來引用:

<script language="JavaScript" type="text/javascript">
<!--
//定義了一個(gè)User類,包括兩個(gè)成員age和sex,并指定了初始值。
function User(){
 this.age=21;
 this.sex="male";
}
//創(chuàng)建user對(duì)象
var user=new User();
//根據(jù)下拉列表框顯示用戶的信息
function show(slt){
 if(slt.selectedIndex!=0){
  alert(user[slt.value]);
 }
}
//-->
</script>
<!--下拉列表框用于選擇用戶信息-->
<select onchange="show(this)">
�。紀(jì)ption>請(qǐng)選擇需要查看的信息:</option>
�。紀(jì)ption value="age">年齡</option>
 <o(jì)ption value="sex">性別</option>
</select>

  在這段代碼中,使用一個(gè)下拉列表框讓用戶選擇查看哪個(gè)信息,每個(gè)選項(xiàng)的value就表示用戶對(duì)象的屬性名稱。這時(shí)如果不采用方括號(hào)的形式,可使用如下代碼來實(shí)現(xiàn):

function show(slt){
 if(slt.selectedIndex!=0){
  if(slt.value=="age")alert(user.age);
  if(slt.value=="sex")alert(user.sex);
 }
}

  而使用方括號(hào)語法,則只需寫為:

alert(user[slt.value]);

  方括號(hào)語法像一種參數(shù)語法,可用一個(gè)變量來表示引用對(duì)象的哪個(gè)屬性。如果不采用這種方法,又不想用條件判斷,可以使用eval函數(shù):

alert(eval("user."+slt.value));

  這里利用eval函數(shù)的性質(zhì),執(zhí)行了一段動(dòng)態(tài)生成的代碼,并返回了結(jié)果。

  實(shí)際上,在前面講述document的集合對(duì)象時(shí),就有類似方括號(hào)的用法,比如引用頁面中一個(gè)名為“theForm”的表單對(duì)象,以前的用法是:

document.forms["theForm"];

  也可以改寫為:

document.forms.theForm;

  forms對(duì)象是一個(gè)內(nèi)部對(duì)象,和自定義對(duì)象不同的是,它還可以用索引來引用其中的一個(gè)屬性。

  動(dòng)態(tài)添加、修改、刪除對(duì)象的屬性和方法

  前面介紹了如何引用一個(gè)對(duì)象的屬性和方法,現(xiàn)在介紹如何為一個(gè)對(duì)象添加、修改或者刪除屬性和方法。

  其他語言中,對(duì)象一旦生成,就不可更改,要為一個(gè)對(duì)象添加、修改成員必須要在對(duì)應(yīng)的類中修改,并重新實(shí)例化,程序也必須重新編譯。JavaScript提供了靈活的機(jī)制來修改對(duì)象的行為,可以動(dòng)態(tài)添加、修改、刪除屬性和方法。例如:先用類Object來創(chuàng)建一個(gè)空對(duì)象user:

 

var user=new Object();

  1.添加屬性

  這時(shí)user對(duì)象沒有任何屬性和方法,可以為它動(dòng)態(tài)的添加屬性,例如:

user.name="jack";
user.age=21;
user.sex="male";

  通過上述語句,user對(duì)象具有了三個(gè)屬性:name、age和sex。下面輸出這三個(gè)語句:

alert(user.name);
alert(user.age);
alert(user.sex);

  由代碼運(yùn)行效果可知,三個(gè)屬性已經(jīng)完全屬于user對(duì)象了。

  2.添加方法

  添加方法的過程和添加屬性類似:

user.alert=function(){
 alert("my name is:"+this.name);
}

  這就為user對(duì)象添加了一個(gè)方法“alert”,通過執(zhí)行它,彈出一個(gè)對(duì)話框顯示自己的名字:

user.alert();


圖2

  圖2顯示了執(zhí)行的結(jié)果。

  3.修改屬性和方法

  修改一個(gè)屬性和方法的過程就是用新的屬性替換舊的屬性,例如:

user.name="tom";
user.alert=function(){
 alert("hello,"+this.name);
}

  這樣就修改了user對(duì)象name屬性的值和alert方法,它從顯示“my name is”對(duì)話框變?yōu)榱孙@示“hello”對(duì)話框。

  4.刪除屬性和方法

  刪除一個(gè)屬性和方法的過程也很簡(jiǎn)單,就是將其置為undefined:

user.name=undefined;
user.alert=undefined;

  這樣就刪除了name屬性和alert方法。

  在添加、修改或者刪除屬性時(shí),和引用屬性相同,也可以采用方括號(hào)([])語法:

user["name"]="tom";

  使用這種方式還有一個(gè)特點(diǎn),可以使用非標(biāo)識(shí)符字符串作為屬性名稱,例如標(biāo)識(shí)符中不允許以數(shù)字開頭或者出現(xiàn)空格,但在方括號(hào)([])語法中卻可以使用:

user["my name"]="tom";

  需要注意,在使用這種非標(biāo)識(shí)符作為名稱的屬性時(shí),仍然要用方括號(hào)語法來引用:

alert(user["my name"]);

  而不能寫為:

alert(user.my name);

  事實(shí)上,JavaScript中的每個(gè)對(duì)象都是動(dòng)態(tài)可變的,這給編程帶來了靈活性,也和其他語言產(chǎn)生了區(qū)別。

  使用大括號(hào)({ })語法創(chuàng)建無類型對(duì)象

  傳統(tǒng)的面向?qū)ο笳Z言中,每個(gè)對(duì)象都會(huì)對(duì)應(yīng)到一個(gè)類。上一節(jié)講this指針時(shí)提到,JavaScript中的對(duì)象其實(shí)就是屬性(方法)的一個(gè)集合,并沒有嚴(yán)格意義上類的概念。所以它提供了一種簡(jiǎn)單的方式來創(chuàng)建對(duì)象,即大括號(hào)({})語法:

 

{
 property1:statement,
 property2:statement2,
 …,
 propertyN:statmentN
}

  通過大括號(hào)括住多個(gè)屬性或方法及其定義(這些屬性或方法用逗號(hào)隔開),來實(shí)現(xiàn)對(duì)象的定義,這段代碼就直接定義個(gè)了具有n個(gè)屬性或方法的對(duì)象,其中屬性名和其定義之間用冒號(hào)(:)隔開。例如:

<script language="JavaScript" type="text/javascript">
<!--
var obj={}; //定義了一個(gè)空對(duì)象
var user={
 name:"jack", //定義了name屬性,初始化為jack
 favoriteColor:["red","green","black","white"],//定義了顏色喜好數(shù)組
 hellfunction(){ //定義了方法hello
  alert("hello,"+this.name);
 },
 sex:"male" //定義了性別屬性sex,初始化為male
}

//調(diào)用user對(duì)象的方法hello
user.hello();
//-->
</script>

  第一行定義了一個(gè)無類型對(duì)象obj,它等價(jià)于:

var obj=new Object();

  接著定義了一個(gè)對(duì)象user及其屬性和方法。注意,除了最后一個(gè)屬性(方法)定義,其他的必須以逗號(hào)(,)結(jié)尾。其實(shí),使用動(dòng)態(tài)增減屬性的方法也可以定義一個(gè)完全相同的user對(duì)象,讀者可使用前面介紹的方法實(shí)現(xiàn)。

  使用這種方式來定義對(duì)象,還可以使用字符串作為屬性(方法)名,例如:

var obj={"001":"abc"}

  這就給對(duì)象obj定義了一個(gè)屬性“001”,這并不是一個(gè)有效的標(biāo)識(shí)符,所以要引用這個(gè)屬性必須使用方括號(hào)語法:

obj["001"];

  由此可見,無類型對(duì)象提供了一種創(chuàng)建對(duì)象的簡(jiǎn)便方式,它以緊湊和清晰的語法將一個(gè)對(duì)象體現(xiàn)為一個(gè)完整的實(shí)體。而且也有利于減少代碼的體積,這對(duì)JavaScript代碼來說尤其重要,減少體積意味著提高了訪問速度。

  prototype原型對(duì)象

  prototype對(duì)象是實(shí)現(xiàn)面向?qū)ο蟮囊粋(gè)重要機(jī)制。每個(gè)函數(shù)(function)其實(shí)也是一個(gè)對(duì)象,它們對(duì)應(yīng)的類是“Function”,但它們身份特殊,每個(gè)函數(shù)對(duì)象都具有一個(gè)子對(duì)象prototype。即prototype表示了該函數(shù)的原型,而函數(shù)也是類,prototype就是表示了一個(gè)類的成員的集合。當(dāng)通過new來獲取一個(gè)類的對(duì)象時(shí),prototype對(duì)象的成員都會(huì)成為實(shí)例化對(duì)象的成員。

  既然prototype是一個(gè)對(duì)象,可以使用前面兩節(jié)介紹的方法對(duì)其進(jìn)行動(dòng)態(tài)的修改,這里先給出一個(gè)簡(jiǎn)單的例子:

//定義了一個(gè)空類
function class1(){
 //empty
}
//對(duì)類的prototype對(duì)象進(jìn)行修改,增加方法method
class1.prototype.method=function(){
 alert("it's a test method");
}
//創(chuàng)建類class1的實(shí)例
var obj1=new class1();
//調(diào)用obj1的方法method
obj1.method();


圖3顯示了執(zhí)行的結(jié)果。
 

分享:解析AJAX中的一些關(guān)鍵技術(shù)
ajax架構(gòu)中主要涉及的技術(shù): client: javascript解析xml, 操縱DOM修改html頁面,javascript是“OO”的語言。 server: servlet + dao, 實(shí)現(xiàn)service接口即可 下面是client中主要的代碼: 1。JS中封裝解析xml的代碼,以及實(shí)例應(yīng)用。 Quote //類的構(gòu)造,傳入xml

來源:模板無憂//所屬分類:AJAX教程/更新時(shí)間:2010-05-26
相關(guān)AJAX教程