MDN wants to learn about developers like you: https://qsurvey.mozilla.com/s3/MDN-dev-survey

建構子函數的使用

 

建構子函數的使用

還有一個選擇,你可以按照這兩個步驟來建立物件︰

  1. 編寫建構子函數以完成物件類型的定義。
  2. 使用 new 建立物件的實體。

若要定義物件類型,就指定物件類型的名稱、屬性、方法並建立函數。舉例來說,假設你想要給 car 建立物件類型。你希望這個物件的類型稱作 car,而且你還希望他有 make、model、year 這些屬性。要做到這些,你需要編寫出以下的函數︰

function car(make, model, year) {
   this.make = make;
   this.model = model;
   this.year = year;
}

注意 this 是用來把傳送給函數的值代入給物件的屬性。

現在你可以建立稱作 mycar 的物件如下所示︰

mycar = new car("Eagle", "Talon TSi", 1993);

這個語句建立 mycar 並且把指定的值代入給他自己的屬性。然後 mycar.make 的值是字串 "Eagle",mycar.year 是整數 1993,依此類推。

你可以藉由呼叫 new 來建立許多個 car 的物件。例如,

kenscar = new car("Nissan", "300ZX", 1992);
vpgscar = new car("Mazda", "Miata", 1990);

物件可以有另一個物件本身的屬性。例如,假設你定義稱為 person 的物件如下︰

function person(name, age, sex) {
   this.name = name;
   this.age = age;
   this.sex = sex;
}

然後實體化兩個新的 person 物件如下︰

rand = new person("Rand McKinnon", 33, "M");
ken = new person("Ken Jones", 39, "M");

然後你可以改寫 car 的定義,加入用來接受 person 物件的 owner 屬性,如下︰

function car(make, model, year, owner) {
   this.make = make;
   this.model = model;
   this.year = year;
   this.owner = owner;
}

若要實體化新的物件,你可以如下使用︰

car1 = new car("Eagle", "Talon TSi", 1993, rand);
car2 = new car("Nissan", "300ZX", 1992, ken);

注意,當建立新的物件的時候,傳入的並不是字面表達字串或整數值,上面的語句把 randken 物件當作參數傳給 owners。然後如果你希望找出 car2 的 owner 的名稱,你可以如下存取屬性︰

car2.owner.name

注意,你永遠可以給之前定義的物件加入屬性。例如,語句

car1.color = "black"

color 屬性加入給 car1,並且把 "black" 的值代入給新加入的屬性。然而,這樣並不能影響到其他的任何物件。若要給所有同樣類型的物件加入新的屬性,你必須把新的屬性加入到 car 物件類型的定義。

文件標籤與貢獻者

 此頁面的貢獻者: teoli, happysadman
 最近更新: teoli,