官术网_书友最值得收藏!

5.2 自定義對象的創建

視頻講解

創建自定義對象主要有3種方法:一種是直接創建自定義對象,另一種是通過自定義構造函數來創建,還有一種是通過系統內置的Object對象創建。

5.2.1 直接創建自定義對象

直接創建自定義對象的語法格式如下:

    var 對象名 = {屬性名1:屬性值1,屬性名2:屬性值2,屬性名3:屬性值3...}

由語法格式可以看出,直接創建自定義對象時,所有屬性都放在大括號中,屬性之間用逗號分隔,每個屬性都由屬性名和屬性值兩部分組成,屬性名和屬性值之間用冒號隔開。

例如,創建一個學生對象student,并設置3個屬性,分別為name、sex和age,然后輸出這3個屬性的值,代碼如下:

    01  var student = {                                //創建student對象
    02      name:"張三",
    03      sex:"男",
    04      age:25
    05  }
    06  document.write("姓名:"+student.name+"<br>");  //輸出name屬性值
    07  document.write("性別:"+student.sex+"<br>");   //輸出sex屬性值
    08  document.write("年齡:"+student.age+"<br>");   //輸出age屬性值

運行結果如圖5.3所示。

圖5.3 創建學生對象并輸出屬性值

另外,還可以使用數組的方式對屬性值進行輸出,代碼如下:

    01  var student = {                                   //創建student對象
    02      name:"張三",
    03      sex:"男",
    04      age:25
    05  }
    06  document.write("姓名:"+student['name']+"<br>");  //輸出name屬性值
    07  document.write("性別:"+student['sex']+"<br>");   //輸出sex屬性值
    08  document.write("年齡:"+student['age']+"<br>");   //輸出age屬性值
5.2.2 通過自定義構造函數創建對象

雖然直接創建自定義對象很方便也很直觀,但是如果要創建多個相同的對象,使用這種方法就很煩瑣。在JavaScript中可以自定義構造函數,通過調用自定義的構造函數可以創建并初始化一個新的對象。與普通函數不同,調用構造函數必須要使用new運算符。構造函數也可以和普通函數一樣使用參數,其參數通常用于初始化新對象。在構造函數的函數體內通過this關鍵字初始化對象的屬性與方法。

例如,要創建一個學生對象student,可以定義一個名稱為Student的構造函數,代碼如下:

    01  function Student(name,sex,age){  //定義構造函數
    02      this.name = name;            //初始化對象的name屬性
    03      this.sex = sex;              //初始化對象的sex屬性
    04      this.age = age;              //初始化對象的age屬性
    05  }

上述代碼中,在構造函數內部對name、sex和age 3個屬性進行了初始化,其中,this關鍵字表示對對象自己屬性、方法的引用。

利用該函數,可以用new運算符創建一個新對象,代碼如下:

    var student1 = new Student("張三","男",25);  //創建對象實例

上述代碼創建了一個名為student1的新對象,新對象student1稱為對象student的實例。使用new運算符創建一個對象實例后,JavaScript會接著自動調用所使用的構造函數,執行構造函數中的程序。

另外,還可以創建多個student對象的實例,每個實例都是獨立的。代碼如下:

    01  var student2 = new Student("李四","女",23);  //創建其他對象實例
    02  var student3 = new Student("王五","男",28);  //創建其他對象實例

【例5.01】應用構造函數創建一個球員對象,定義構造函數Player(),在函數中應用this關鍵字初始化對象中的屬性,然后創建一個對象實例,最后輸出對象中的屬性值,即輸出球員的身高、體重、運動項目、所屬球隊和專業特點。程序代碼如下:(實例位置:資源包\源碼\05\5.01)

    01  <h1 style="font-size:24px;">梅西</h1>
    02  <script type="text/javascript">
    03  function Player(height,weight,sport,team,character){
    04     this.height = height;                            //對象的height屬性
    05     this.weight = weight;                            //對象的weight屬性
    06     this.sport = sport;                              //對象的sport屬性
    07     this.team = team;                                //對象的team屬性
    08     this.character = character;                      //對象的character屬性
    09  }
    10  //創建一個新對象player1
    11  var player1 = new Player("170cm","67kg","足球","巴塞羅那","技術出色,意識好");
    12  document.write("球員身高:"+player1.height+"<br>");    //輸出height屬性值
    13  document.write("球員體重:"+player1.weight+"<br>");    //輸出weight屬性值
    14  document.write("運動項目:"+player1.sport+"<br>");     //輸出sport屬性值
    15  document.write("所屬球隊:"+player1.team+"<br>");     //輸出team屬性值
    16  document.write("專業特點:"+player1.character+"<br>"); //輸出character屬性值
    17  </script>

運行結果如圖5.4所示。

圖5.4 輸出球員對象的屬性值

對象不但可以擁有屬性,還可以擁有方法。在定義構造函數時,也可以定義對象的方法。與對象的屬性一樣,在構造函數中也需要使用this關鍵字來初始化對象的方法。例如,在student對象中定義3個方法showName()、showAge()和showSex(),代碼如下:

    01  function Student(name,sex,age){  //定義構造函數
    02      this.name = name;            //初始化對象的屬性
    03      this.sex = sex;              //初始化對象的屬性
    04      this.age = age;              //初始化對象的屬性
    05      this.showName = showName;    //初始化對象的方法
    06      this.showSex = showSex;      //初始化對象的方法
    07      this.showAge = showAge;      //初始化對象的方法
    08  }
    09  function showName(){             //定義showName()方法
    10      alert(this.name);            //輸出name屬性值
    11  }
    12  function showSex(){              //定義showSex()方法
    13      alert(this.sex);                //輸出sex屬性值
    14  }
    15  function showAge(){              //定義showAge()方法
    16      alert(this.age);                //輸出age屬性值
    17  }

另外,也可以在構造函數中直接使用表達式來定義方法,代碼如下:

    01  function Student(name,sex,age){  //定義構造函數
    02      this.name = name;            //初始化對象的屬性
    03      this.sex = sex;               //初始化對象的屬性
    04      this.age = age;              //初始化對象的屬性
    05      this.showName=function(){    //應用表達式定義showName()方法
    06          alert(this.name);        //輸出name屬性值
    07      };
    08      this.showSex=function(){     //應用表達式定義showSex()方法
    09          alert(this.sex);         //輸出sex屬性值
    10      };
    11      this.showAge=function(){     //應用表達式定義showAge()方法
    12          alert(this.age);         //輸出age屬性值
    13     };
    14  }

【例5.02】應用構造函數創建一個演員對象Actor,在構造函數中定義對象的屬性和方法,通過創建的對象實例調用對象中的方法,輸出演員的中文名、代表作品以及主要成就。程序代碼如下:(實例位置:資源包\源碼\05\5.02)

    01  function Actor(name,work,achievement){
    02     this.name = name;                                     //對象的name屬性
    03     this.work = work;                                     //對象的work屬性
    04     this.achievement = achievement;                       //對象的achievement屬性
    05     this.introduction = function(){                          //定義introduction()方法
    06        document.write("中文名:"+this.name);               //輸出name屬性值
    07        document.write("<br>代表作品:"+this.work);         //輸出work屬性值
    08        document.write("<br>主要成就:"+this.achievement);   //輸出achievement屬性值
    09     }
    10  }
    11  var Actor1 = new Actor("威爾·史密斯","《獨立日》、《黑衣人》",
                              "奧斯卡金像獎最佳男主角提名");     //創建對象Actor1
    12  Actor1.introduction();                                    //調用introduction()方法

運行結果如圖5.5所示。

圖5.5 調用對象中的方法輸出演員簡介

調用構造函數創建對象需要注意一個問題。如果構造函數中定義了多個屬性和方法,那么在每次創建對象實例時都會為該對象分配相同的屬性和方法,這樣會增加對內存的需求,這時可以通過prototype屬性來解決這個問題。

prototype屬性是JavaScript中所有函數都有的一個屬性。該屬性可以向對象中添加屬性或方法。

語法如下:

    object.prototype.name=value

參數說明。

 object:構造函數名。

 name:要添加的屬性名或方法名。

 value:添加屬性的值或執行方法的函數。

例如,在student對象中應用prototype屬性向對象中添加一個show()方法,通過調用show()方法輸出對象中3個屬性的值。代碼如下:

    01  function Student(name,sex,age){                          //定義構造函數
    02      this.name = name;                                   //初始化對象的屬性
    03      this.sex = sex;                                      //初始化對象的屬性
    04      this.age = age;                                      //初始化對象的屬性
    05  }
    06  Student.prototype.show=function(){                       //添加show()方法
    07      alert("姓名:"+this.name+"\n性別:"+this.sex+"\n年齡:"+this.age);
    08  }
    09  var student1=new Student("張三","男",25);                //創建對象實例
    10  student1.show();                                         //調用對象的show()方法

運行結果如圖5.6所示。

圖5.6 輸出3個屬性值

【例5.03】應用構造函數創建一個圓的對象Circle,定義構造函數Circle(),然后應用prototype屬性向對象中添加屬性和方法,通過調用方法實現計算圓的周長和面積的功能。程序代碼如下:(實例位置:資源包\源碼\05\5.03)

    01  function Circle(r){
    02     this.r=r;                                             //設置對象的r屬性
    03  }
    04  Circle.prototype.pi=3.14;                                //添加對象的pi屬性
    05  Circle.prototype.circumference=function(){               //添加計算圓周長的circumference()方法
    06     return 2*this.pi*this.r;                              //返回圓的周長
    07  }
    08  Circle.prototype.area=function(){                        //添加計算圓面積的area()方法
    09     return this.pi*this.r*this.r;                         //返回圓的面積
    10  }
    11  var c=new Circle(10);                                    //創建一個新對象c
    12  document.write("圓的半徑為"+c.r+"<br>");                 //輸出圓的半徑
    13  document.write("圓的周長為"+parseInt(c.circumference())+"<br>");  //輸出圓的周長
    14  document.write("圓的面積為"+parseInt(c.area()));             //輸出圓的面積

運行結果如圖5.7所示。

圖5.7 計算圓的周長和面積

5.2.3 通過Object對象創建自定義對象

Object對象是JavaScript中的內部對象,它提供了對象的最基本功能,這些功能構成了所有其他對象的基礎。Object對象提供了創建自定義對象的簡單方式,使用這種方式不需要再定義構造函數。可以在程序運行時為JavaScript對象隨意添加屬性,因此使用Object對象能很容易地創建自定義對象。

創建Object對象的語法如下:

    obj = new Object([value])

參數說明。

 obj:必選項。要賦值為Object對象的變量名。

 value:可選項。任意一種基本數據類型(Number、Boolean或String)。如果value為一個對象,返回不做改動的該對象。如果value為null、undefined,或者沒有給出,則產生沒有內容的對象。

使用Object對象可以創建一個沒有任何屬性的空對象。如果要設置對象的屬性,只需要將一個值賦給對象的新屬性即可。例如,使用Object對象創建一個自定義對象student,并設置對象的屬性,然后對屬性值進行輸出,代碼如下:

    01  var student = new Object();                    //創建一個空對象
    02  student.name = "王五";                         //設置對象的name屬性
    03  student.sex = "男";                            //設置對象的sex屬性
    04  student.age = 28;                              //設置對象的age屬性
    05  document.write("姓名:"+student.name+"<br>");  //輸出對象的name屬性值
    06  document.write("性別:"+student.sex+"<br>");   //輸出對象的sex屬性值
    07  document.write("年齡:"+student.age+"<br>");   //輸出對象的age屬性值

運行結果如圖5.8所示。

圖5.8 創建Object對象并輸出屬性值

說明

一旦通過給屬性賦值創建了該屬性,就可以在任何時候修改這個屬性的值,只需要賦給它新值即可。

在使用Object對象創建自定義對象時,也可以定義對象的方法。例如,在student對象中定義方法show(),然后對方法進行調用,代碼如下:

    01  var student = new Object();                        //創建一個空對象
    02  student.name = "張三";                             //設置對象的name屬性
    03  student.sex = "男";                                //設置對象的sex屬性
    04  student.age = 25;                                  //設置對象的age屬性
    05  student.show = function(){                         //定義對象的方法
    06      //輸出屬性的值
    07      alert("姓名:"+student.name+"\n性別:"+student.sex+"\n年齡:"+student.age);
    08  };
    09  student.show();  //調用對象的方法

運行結果如圖5.9所示。

圖5.9 調用對象的方法

如果在創建Object對象時沒有指定參數,JavaScript將會創建一個Object實例,但該實例并沒有具體指定為哪種對象類型,這種方法多用于創建一個自定義對象。如果在創建Object對象時指定了參數,可以直接將value參數的值轉換為相應的對象。如以下代碼就是通過Object對象創建了一個字符串對象。

    var myObj = new Object("你好JavaScript");  //創建一個字符串對象

【例5.04】使用Object對象創建自定義對象book,在book對象中定義方法getBookInfo(),在方法中傳遞3個參數,然后對這個方法進行調用,輸出圖書信息。程序代碼如下:(實例位置:資源包\源碼\05\5.04)

    01  var book = new Object();                                 //創建一個空對象
    02  book.getBookInfo = getBookInfo;                          //定義對象的方法
    03  function getBookInfo(name,type,price){
    04     //輸出圖書的書名、類型及價格
    05     document.write("書名:"+name+"<br>類型:"+type+"<br>價格:"+price);
    06  }
    07  book.getBookInfo("JavaScript入門經典","JavaScript","80");   //調用對象的方法

運行結果如圖5.10所示。

圖5.10 創建圖書對象并調用對象中的方法

主站蜘蛛池模板: 台江县| 腾冲县| 迁西县| 巢湖市| 临夏市| 平和县| 精河县| 曲周县| 禹州市| 贞丰县| 怀柔区| 顺义区| 彰化市| 格尔木市| 香港 | 沁阳市| 南木林县| 买车| 尼玛县| 同仁县| 雷山县| 义马市| 阿拉善盟| 平昌县| 东乡| 玛纳斯县| 彭阳县| 陇西县| 嘉禾县| 长葛市| 吉安县| 合作市| 鄱阳县| 精河县| 萨嘎县| 城固县| 三门县| 无为县| 筠连县| 内江市| 那坡县|