亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > AJAX > 正文

AJAX中JavaScript支持面向對象的基礎

2024-09-01 08:26:30
字體:
來源:轉載
供稿:網友
 在面向對象的思想中,最核心的概念之一就是類。一個類表示了具有相似性質的一類事物的抽象,通過實例化一個類,可以獲得屬于該類的一個實例,即對象。

  在JavaScript中定義一個類的方法如下:

function class1(){
 //類成員的定義及構造函數
}

  這里class1既是一個函數也是一個類??梢詫⑺斫鉃轭惖臉嬙旌瘮?,負責初始化工作。

  使用new操作符獲得一個類的實例

  在前面介紹基本對象時,已經用過new操作符,例如:

new Date();

  表示創建一個日期對象,而Date就是表示日期的類,只是這個類是由JavaScript內部提供的,而不是由用戶定義的。

  new操作符不僅對內部類有效,對用戶定義的類也同樣有效,對于上節定義的class1,也可以用new來獲取一個實例:

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

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

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


  從運行結果看,執行了hello函數,同時obj也獲得了一個對象的引用。當new一個函數時,這個函數就是所代表類的構造函數,其中的代碼被看作為了初始化一個對象。用于表示類的函數也稱為構造器。

  使用方括號([ ])引用對象的屬性和方法

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

  對象名.屬性(方法)名

  還可以用方括號的形式來引用:

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

  注意,這里的方法名和屬性名是一個字符串,不是原先點(? )號后面的標識符,例如:

 

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


圖1

  圖1顯示了執行的結果。

  由此可見,上面的代碼等價于:

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

  這種引用屬性(方法)的方式和數組類似,體現了JavaScript對象就是一組屬性(方法)的集合這個性質。

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

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

  在這段代碼中,使用一個下拉列表框讓用戶選擇查看哪個信息,每個選項的value就表示用戶對象的屬性名稱。這時如果不采用方括號的形式,可使用如下代碼來實現:

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

  而使用方括號語法,則只需寫為:

alert(user[slt.value]);

  方括號語法像一種參數語法,可用一個變量來表示引用對象的哪個屬性。如果不采用這種方法,又不想用條件判斷,可以使用eval函數:

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

  這里利用eval函數的性質,執行了一段動態生成的代碼,并返回了結果。

  實際上,在前面講述document的集合對象時,就有類似方括號的用法,比如引用頁面中一個名為“theForm”的表單對象,以前的用法是:

document.forms["theForm"];

  也可以改寫為:

document.forms.theForm;

  forms對象是一個內部對象,和自定義對象不同的是,它還可以用索引來引用其中的一個屬性。

  動態添加、修改、刪除對象的屬性和方法

  前面介紹了如何引用一個對象的屬性和方法,現在介紹如何為一個對象添加、修改或者刪除屬性和方法。

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

 

var user=new Object();

  1.添加屬性

  這時user對象沒有任何屬性和方法,可以為它動態的添加屬性,例如:

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

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

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

  由代碼運行效果可知,三個屬性已經完全屬于user對象了。

  2.添加方法

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

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

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

user.alert();


圖2

  圖2顯示了執行的結果。

  3.修改屬性和方法

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

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

  這樣就修改了user對象name屬性的值和alert方法,它從顯示“my name is”對話框變為了顯示“hello”對話框。

  4.刪除屬性和方法

  刪除一個屬性和方法的過程也很簡單,就是將其置為undefined:

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

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

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

user["name"]="tom";

  使用這種方式還有一個特點,可以使用非標識符字符串作為屬性名稱,例如標識符中不允許以數字開頭或者出現空格,但在方括號([])語法中卻可以使用:

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

  需要注意,在使用這種非標識符作為名稱的屬性時,仍然要用方括號語法來引用:

alert(user["my name"]);

  而不能寫為:

alert(user.my name);

  事實上,JavaScript中的每個對象都是動態可變的,這給編程帶來了靈活性,也和其他語言產生了區別。

  使用大括號({ })語法創建無類型對象

  傳統的面向對象語言中,每個對象都會對應到一個類。上一節講this指針時提到,JavaScript中的對象其實就是屬性(方法)的一個集合,并沒有嚴格意義上類的概念。所以它提供了一種簡單的方式來創建對象,即大括號({})語法:

 

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

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

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

//調用user對象的方法hello
user.hello();
//-->
</script>

  第一行定義了一個無類型對象obj,它等價于:

var obj=new Object();

  接著定義了一個對象user及其屬性和方法。注意,除了最后一個屬性(方法)定義,其他的必須以逗號(,)結尾。其實,使用動態增減屬性的方法也可以定義一個完全相同的user對象,讀者可使用前面介紹的方法實現。

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

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

  這就給對象obj定義了一個屬性“001”,這并不是一個有效的標識符,所以要引用這個屬性必須使用方括號語法:

obj["001"];

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

  prototype原型對象

  prototype對象是實現面向對象的一個重要機制。每個函數(function)其實也是一個對象,它們對應的類是“Function”,但它們身份特殊,每個函數對象都具有一個子對象prototype。即prototype表示了該函數的原型,而函數也是類,prototype就是表示了一個類的成員的集合。當通過new來獲取一個類的對象時,prototype對象的成員都會成為實例化對象的成員。

  既然prototype是一個對象,可以使用前面兩節介紹的方法對其進行動態的修改,這里先給出一個簡單的例子:

//定義了一個空類
function class1(){
 //empty
}
//對類的prototype對象進行修改,增加方法method
class1.prototype.method=function(){
 alert("it's a test method");
}
//創建類class1的實例
var obj1=new class1();
//調用obj1的方法method
obj1.method();


圖3顯示了執行的結果。
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线精品国产成人综合| 日韩视频免费看| 久久视频在线观看免费| 日韩精品在线免费播放| 色综合久久中文字幕综合网小说| 欧美理论电影在线播放| 亚洲国产欧美日韩精品| 91高潮精品免费porn| 亚洲欧美福利视频| 国产aaa精品| 久久久久九九九九| 青青在线视频一区二区三区| 欧美性感美女h网站在线观看免费| 久久99精品国产99久久6尤物| 日韩av影视在线| 亚洲大尺度美女在线| 日韩av电影中文字幕| 亚洲一区亚洲二区亚洲三区| 韩日欧美一区二区| 久久久久久九九九| 国产综合在线观看视频| 午夜精品久久久99热福利| 欧美日韩中文字幕综合视频| 欧美人与性动交| 亚洲美女久久久| 国产成人亚洲综合| 国产ts一区二区| 日韩女优在线播放| 亚洲爱爱爱爱爱| 欧美极品少妇xxxxⅹ喷水| 精品久久久一区| 亚洲欧美在线x视频| 国产亚洲精品久久久久动| 国产精品成人免费视频| 日韩欧美在线视频日韩欧美在线视频| 国产日韩欧美电影在线观看| 欧美日韩亚洲网| 欧美一级高清免费播放| 日韩av在线网页| 日韩av在线导航| 亚洲成av人乱码色午夜| 在线日韩精品视频| 欧美又大又粗又长| 最新中文字幕亚洲| 久热在线中文字幕色999舞| 亚洲精品国产精品国自产在线| 久久精品一偷一偷国产| 日韩在线观看免费| 亚洲国产中文字幕久久网| 日本伊人精品一区二区三区介绍| 欧美另类xxx| 日本sm极度另类视频| 午夜精品久久久久久久白皮肤| 亚洲精品天天看| 国产精品视频色| 91九色单男在线观看| 性色av香蕉一区二区| 日韩美女在线观看| 日韩国产欧美精品一区二区三区| 国产精品视频在线观看| 亚洲xxxx做受欧美| 欧美精品成人91久久久久久久| 国产视频久久久久久久| 亚洲福利视频免费观看| 欧美在线视频一区| 国内精品美女av在线播放| 中文字幕亚洲在线| 欧美国产日韩精品| 亚洲自拍偷拍在线| 国产精品久久久久99| 伊人久久久久久久久久久| 欧美国产亚洲精品久久久8v| 91网站在线免费观看| 97久久久免费福利网址| 国产91精品久久久久久久| 亚洲成人网在线观看| 国产深夜精品福利| 亚洲欧洲中文天堂| 91国产视频在线| 欧美在线国产精品| 狠狠躁夜夜躁人人躁婷婷91| 欧美激情在线视频二区| 国产精品极品美女粉嫩高清在线| 久久精品国产69国产精品亚洲| 欧美黑人性视频| 日韩精品久久久久久久玫瑰园| 欧美交受高潮1| 日本久久91av| 在线亚洲国产精品网| 全色精品综合影院| 亚洲色在线视频| 欧美精品精品精品精品免费| 欧美一级大胆视频| 欧美日韩黄色大片| 亚洲国内精品在线| 成人有码在线播放| 欧美丝袜一区二区三区| 亚洲午夜激情免费视频| 日韩精品极品视频| 久久99热这里只有精品国产| 91色视频在线导航| 欧美疯狂xxxx大交乱88av| 日韩精品福利在线| 亚洲图片在线综合| 精品久久久久久中文字幕大豆网| 一区二区av在线| 日韩中文理论片| 91精品国产99| 91九色精品视频| 国产精品久久久久久久久男| 97免费在线视频| 亚洲国产精品久久久久秋霞蜜臀| 亚洲欧洲一区二区三区在线观看| 国产精品久久久久久亚洲影视| 亚洲精品成人免费| 日韩高清av在线| 91在线观看免费观看| 精品国偷自产在线| 国产精品www色诱视频| 欧美极品美女视频网站在线观看免费| 亚洲精品一区二三区不卡| 国产一区二区三区在线播放免费观看| 欧美日韩一区免费| www.精品av.com| 久久av资源网站| 欧美二区乱c黑人| 亚洲成人免费网站| 日韩亚洲一区二区| 成人激情在线播放| 亚洲精品视频免费在线观看| 国产精品视频自在线| 亚洲国产精品热久久| www.欧美免费| 欧美高跟鞋交xxxxhd| 亚洲欧美另类人妖| 国产精品∨欧美精品v日韩精品| 日韩精品欧美国产精品忘忧草| 日本不卡高字幕在线2019| 亚洲直播在线一区| 国产精品国产三级国产专播精品人| 综合av色偷偷网| 欧美插天视频在线播放| 欧美激情视频网站| 精品小视频在线| 在线观看国产精品日韩av| 日韩精品极品在线观看播放免费视频| 亚洲免费小视频| 国产mv免费观看入口亚洲| 国产小视频国产精品| 欧美激情亚洲一区| 久久久国产精品一区| 国产精品亚洲аv天堂网| 国产精品日韩在线观看| 成人免费在线视频网址| 久久福利视频导航| 成人激情视频在线观看| 国产成人aa精品一区在线播放| 欧美精品18videos性欧美| 亚洲欧美精品一区| 亚洲免费高清视频| 欧美日韩高清在线观看| 91精品久久久久久久久久久久久久| 日本韩国欧美精品大片卡二| 色老头一区二区三区|