javascript並不支援真實的類(像JAVA,C#,C++),但是它可以通過建構函式和屬性定義偽類.
建構函式:通過建構函式來定義一個對象類,使用它的參數來初始化this關鍵字所引用的對象的屬性.建構函式只是初始化了特定的對象,但並不返回這個對象.通過new 調用建構函式.
原型對象和繼承:Javascript對象繼承原型對象的所有屬性.一個對象的原型是由建立並初始化該對象的建構函式定義的.Javascript中的所有屬性都有prototype屬性,它引用了一個對象.看下面的例子.
//建構函式初始化不同執行個體的屬性
function Rectangle(w, h) {
this.width = w;
this.height = h;
}
Rectangle.prototype.area = function( ) { return this.width * this.height; }//原始對象儲存方法並共用執行個體的其他屬性
注意,繼承是在查詢一個屬性值時自動發生的.每個類都有一個原型對象,這個原型對象都具有一套屬性.他們可以通過for/in被列舉出來並且可以用in操作符來測試.但是只能用object.hasOwnProperty()方法來區分,如:
var r = new Rectangle(2, 3);
r.hasOwnProperty("width"); // true: width 是r的一個直接屬性
r.hasOwnProperty("area"); // false: area是r的一個繼承屬性
"area" in r; //true: "area"是r的一個屬性
讀寫繼承屬性:屬性的繼承只發生在讀屬性值時,而在寫屬性值時不會發生.下面通過一個例子說明:
不僅是使用者自訂類有原型對象,內建類如String和Date也有原型對象,並且可以賦值給他們.如:
String.prototype.endsWith = function(c) {
return (c == this.charAt(this.length-1))
}//如果最後一個字元是"c"將返回true
var message = "hello world";
message.endsWith('h') // Returns false
message.endsWith('d') // Returns true
Javascript中的類比類:預設情況下,任何對象屬性都是執行個體屬性,為了真實地類比物件導向的程式設計語言,我們說Javascript中的執行個體屬性是那些在對象中用建構函式建立的或初始化地屬性.執行個體方法和執行個體屬性非常相似,只不過它是方法而不是數值.執行個體方法是由特定對象或執行個體調用的.在Javascript中必須用this特別指明屬性.
類屬性:在Javascript中,Number.MAX_VALUE就是類屬性的一個例子,因為屬性MAX_VALUE就是通過類Number來存取的.由於每個類屬性只有一個副本,所以本質上說來屬性是全域變數.
類方法:一個與類關聯在一起的方法,而不是和類的執行個體關聯在一起的方法.要調用類方法,必須使用類本身,而不能使用該類的特定執行個體.如Date.parse()就是一個類方法.
通用對象方法:toString(),valueOf(),compareTo()
超類和子類:Object是所有內部類的超類,本章中使用的類都是Object的直接子類.
無繼承擴充: