關於javascript物件導向特性的讀書筆記

來源:互聯網
上載者:User

學習javascript的類物件導向特性;
1、對象直接量,其實就是直接定義一個多個值對的組合,例如:
var homer = {
  name: "Homer Simpson",
  age: 34,
  married: true,
  email: "homer@163.com"
  }
2、對象的屬性:可以把一個值賦值給對象的一個新屬性來建立他,例如:
var  book = new Object();
book.title = "Learn c#";
book.chapter1 = "class and  object";
book.chapter1.page = 14;
 這裡book原來只是一個Object類的對象,沒有任何的屬性,可是這裡通過指派陳述式就給他添加了title和chapter1兩個屬性,那麼在接下來的代碼中就可以開始使用這些屬性了。
注意,這裡還使用了屬性的嵌套;
這個特性應該算是比較神奇的,以前在別的語言中沒有見到過;
3、函數是儲存在變數中的值;可以通過把函數賦值給對象的一個屬性來定義個方法,比如:
// define a class  Rectangle
function Rectangle(w,h)
{
 this.Width = w;
 this.Height = h;
}
//define a function
function compute_area()
{
 return this.Width * this.Height;
}
//create a object
var page = new Rectangle(10,20);
//將函數賦值給對象的一個變數
page.area = compute_area;
//call the function through area;
var area = page.area();
當然了,下面這樣的定義會更加合理一些:

function Rectangle_resize(w,h){this.Height=h; this.Width =w;}
function Rectangle_enlarge(){ this.Height = this.Height*2; this.Width = this.Width*2}
function Rectangle(w,h)
{
 this.Width = w;
 this.Height = h;
 this.resize =  Rectangle_resize;
 this.enlarge = Rectangle_enlarge;
}
4、原型對象(Prototype)
使用了遠行對象之後,javascript在表達方面才真正具有了物件導向的感覺;
由於原型對象的屬性被類的所有對象共用,所有他通常只用來定義類中所有對象的相同的屬性。這使得原型對象適用於定義方法和一些常量;(p144)
javascript採用的是以原型對象為基礎的繼承機制,而不是以類為基礎的繼承機制;所以在我們理解來看,他並不是真正的物件導向語言;
在javascript並沒有真正的類的概念,但是他通過建構函式和原型對象類比了類;所以我們可以用他來類比物件導向;
下面給出一個原型對象的例子:
//定義了一個建構函式
function Circle(r)
{
 this.R =r;
}
//定義了一個類屬性
Circle.PI=3.14159;
//定義了一個類方法
Circle.max= function(a,b)
{
 if (a.R>b.R)
  return a
 else
  return b
}
//定義了一個對象方法Area
Circle.prototype=
{
 Area:function(){
  return Circle.PI* this.R*this.R;
 } 
}
//使用該類
var a = new Circle(10);
var b = new Circle(20);
alert(a.Area());
var c = Circle.max(a,b);
alert(c.R);
5、類的層次
一般來說,javascript中的類都是Object的直接子類,這是javascript所特有的。因為一般來說不需要太複雜的類層次體系;
但是有的時候我們可能還是會需要一些基層。
由於javascript的繼承體系是基於prototype的,所以我們要從prototype入手,假如我們要為上面的Circle添加一個子類,那麼只要讓AnotherCircle的prototype對象是Circle類的一個執行個體就可以了:
function AnotherCircle(r)
{
 this.R = r;
}
AnotherCircle.prototype = new Circle(0);
AnotherCircle.prototype.constructor = AnotherCircle;
6、用數組的方式來訪文對象的屬性
例如對於上面的Circle類:
var c = new Circle(1);
alert(c["R"]);
如果使用一個對象是採取的是這種形式,我們常常稱之為關聯陣列;

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.