基礎知識
1. 嚴格上講,在JS中只有對象沒有class
2. 對象可以有專屬的屬性和方法。即對象的屬性和方法是類的超集。
3. ECMAScript可以識別兩種類型的對象。
一種叫做Native Object,屬於語言範疇;
一種叫做Host Object,由運行環境提供例如document對象,Dom Node等。
Native Object是一種鬆散的結構,可以動態增加、刪除、修改對象的屬性(property)和方法(function)。屬性有一個名字和一個值,屬性值可以是另一個對象的引用
或者是內建的資料類型(String, Number, Boolean, Null 或者 Undefined) 。方法有方法和方法體。
可以直接給屬性(方法)指定屬性值(方法體),當對象中不存在此屬性(方法)時,就建立此屬性(方法)。
可以調用delete obj.a刪除屬性或者方法。
一,關於prototype
1. prototype屬性對應一個對象,他是類層級的。通過ClassName.prototype進行訪問。
2. 當建立一個類的對象時,這些對象共用類的prototype屬性。
3. prototype屬性指向一個對象,此對象的對應類可能也有prototype屬性。所以可能形成prototype鏈。
4. 當定義一個類時,他的prototype存在預設值。
5.
讀操作會讀取在對象自己和prototype 鏈上發現的第一個同名屬性值
寫操作會為對象本身建立一個同名屬性(如果這個屬性名稱不存在)。
6. ClassA.prototype=A; ClassA.prototype=B;
那麼B將取代A成為ClassA的prototype。
7.
prototype屬性指向的對象,可以包含屬性和方法。prototype屬性賦值的方法有
ClassA.prototype = objA; //直接指定對象
ClassA.prototype =
{ a:1, b:function(){} };
ClassA.prototype.a = 1; //設定
prototype屬性指向對象的a屬性。
ClassA.prototype.b = function(){};
//
設定
prototype屬性指向對象的b方法。
說明:http://www.javaeye.com/topic/53537
二,關於建立對象
類定義有三種基本方法:
1. 工廠函數。例如
function CoFactory(){
var o = new Object;
o.a = 1 return o
}
用這種方式建立對象: var o = CoFactory();
2. 建構函式。例如
function Co(){
this.a = 1
}
用這種方式建立對象:var o = new Co()。
3. 建構函式+原型。例如
function Co(){
}
Co.prototype.a = 1;
用這種方式建立對象: var o = new Co();
類對象有靜態屬性和方法。可以通過ClassA.a進行訪問。