javascript的函數(6)

來源:互聯網
上載者:User

添加屬性

當我們象上面那樣使用關鍵字new建立一個對象的時候,一個新的Object被建立了。我們可以在建立之後給這個對象添加屬性(就好像我在上面那樣添加屬性name。而接下來的問題就是如果我們建立了這個對象的另外一個執行個體,我們得象下面那樣再次給這個新對象添加這個屬性。)

Example DT3 (creates 3 ball objects)

CODE:

function Ball()
{
}
var ball0=new Ball(); // ball0 現在指向了類型Ball的一個新執行個體
ball0.name="ball-0";  // ball0 現在有一個屬性"name"

var ball1=new Ball();
ball1.name="ball-1";

var ball2=new Ball();

alert(ball0.name);    // 輸出 "ball-0"
alert(ball1.name);    // 輸出 "ball-1"
alert(ball2.name);    // 哦,我忘記給ball2添加“name”了!

我忘記給ball2添加屬性name了,如果在正式的程式中這也許會引發問題。有什麼好辦法可以自動增加屬性呢?嗯,有一個:使用this關鍵字。this這個詞在function中有特別的意義。它指向了調用函數的那個對象。讓我們看看下面的另一個樣本,這時候我們在建構函式中添加上這些屬性:

Example DT4

CODE:
function Ball(message, specifiedName)
{
  alert(message);
  this.name=specifiedName;               
}
var ball0=new Ball("creating new Ball", "Soccer Ball"); 
alert(ball0.name);                   // prints "Soccer Ball"

請記住:是new關鍵字最終使得建構函式被執行。在這個例子中,它將會運行Ball("creating new Ball", "Soccer Ball");而關鍵字this將指向ball0。
因此,這行:this.name=specifiedName變成了ball0.name="Soccer Ball"。
它主要是說:給ball0添加屬性name,屬性值是Soccer Ball。
我們現在只是添加了一個name屬性給ball0,看起來和上一個例子中所做的很象,但卻是一個更好更具擴充性的方法。現在,我們可以隨心所欲的建立許多帶有屬性的ball而無需我們手動添加它們。而且,人們也希望建立的Ball對象能夠清晰的看懂它的建構函式並且能夠輕鬆找出Ball的所有屬性。讓我們添加更多屬性到Ball裡。

Example DT5

CODE:

function Ball(color, specifiedName, owner, weight)
{
  this.name=specifiedName;               
  this.color=color;
  this.owner=owner;
  this.weight=weigth;
}
var ball0=new Ball("black/white", "Soccer Ball", "John", 20); 
var ball1=new Ball("gray", "Bowling Ball", "John", 30); 
var ball2=new Ball("yellow", "Golf Ball", "John", 55); 
var balloon=new Ball("red", "Balloon", "Pete", 10); 

alert(ball0.name);                        // 輸出 "Soccer Ball"
alert(balloon.name);                      // 輸出 "Balloon"
alert(ball2.weight);                      // 輸出 "55"

嘿!使用物件導向術語,你能夠說Ball是一個擁有如下屬性的物件類型:name, color, owner, weight。

將對象賦給屬性

我們並沒被限制只能添加形如字串或者數字之類的單一資料型別作為屬性。我們也能夠將對象賦給屬性。下面,supervisor是Employee的一個屬性.

Example DT6

CODE:

function Employee(name, salary, mySupervisor)
{
  this.name=name;               
  this.salary=salary;
  this.supervisor=mySupervisor;
}
var boss=new Employee("John", 200);

var manager=new Employee("Joan", 50, boss); 
var teamLeader=new Employee("Rose", 50, boss); 

alert(manager.supervisor.name+" is the supervisor of "+manager.name);
alert(manager.name+"\'s supervisor is "+manager.supervisor.name);

 

會輸出什麼呢?

就像你在上面這個例子中看到的那樣,manager和teamLeader都有一個supervisor屬性,而這個屬性是類型Employee的一個對象。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.