昨天不註意看到一個題,據說是一個公司的面試題,上面就說到瞭用javascript來編寫一個類並實現一些方法,而且通過這個類來派生出一些派生類,來實現另外的一些方法!這個時候,有些朋友也不會,所以呢,我也在網上找瞭一下相關的資料說明,看能不能找到這些關於javascript的類的編寫的說明文檔,找是找到瞭,不過很多都沒有進行詳細的說明講解,所以呢,就有瞭今天的這篇blog瞭哈!這裡僅是一些粗略的講解,有不到之處呢請多多見諒哈!高手略過!好,下面開講解吧!
1、類的構造
在這裡我以人類為一個簡單的例子來構造呢,首先是聲明,就像平臺寫方法一樣哦,如下:
function Human(){}這是方法一,
var Human = function(){}這是方法二,兩種都是可以的,我們就用第一種聲明方法呢:完整代碼如下:
function Human(name, age, sex) {
///<summary>
///這裡為一個人類的簡單類
///</summay>
///<param name="name">人的名稱</param>
///<param name="age">人的年齡</param>
///<param name="sex">人的性別</param>
//region 該類的屬性成員
this.name = name;
this.age = age;
this.sex = sex;
//endregion
//region 該類的一個方法
//這個為定義在內部的方法
this.ShowMsg2 = function () {
///<summary>
///顯示一個消息,這裡為彈出一個對話框,顯示年齡
///</summary>
alert(this.age);
}
//endregion
}
這樣就完成瞭一個類的構造瞭哈,下面我們還可能通過prototype來為這個類增加一些其他的方法,這樣可以在不改變這個類的內部結構的同時,改變這個類,如下:
Human.prototype.ShowMsg = function () {
///<summary>
///這個為定義在外部的通過prototype來定義的類的方法,顯示人的年齡,名稱,性別的信息
///</summary>
alert("名稱:" + this.name + ",年齡:" + this.age.toString() + ",性別:" + this.sex);
}
這樣就完成瞭一個外部方法的添加瞭哦!這樣也可以說是一個完整類就這樣完成瞭哈,朋友們也可以在內部直接聲明完成就可以瞭,不必在外面進行修改瞭,隻是通過這個方式的好處就是,可以不改變類的原型的基礎上進行類的修改,在不同的地方加上不同的方法也是可以的!
2、類的繼承
大傢都知道,寫瞭一個類,就會有用到派生的一些類瞭,所以這裡類的繼承也是必不可少的哦,派生類的聲明和基類的聲明其實並沒有什麼不同,略有不同之處就是在派生類的內部,調用瞭基類的構造方法,來實現類的繼承!如下
function Man(name, age) {
///<summary>
///這裡為一個男人的簡單類,繼承Human這個類
///</summay>
///<param name="name">人的名稱</param>
///<param name="age">人的年齡</param>
///<param name="sex">人的性別</param>
//這裡我們調用基類的構造函數,來實現類的繼承
Human.call(this, name, age, "Boy");
//這裡為重寫基類的內部方法.也可以更改基類通過prototype來定義的外部方法
this.ShowMsg = function () {
alert(this.name);
}
}
大傢可以看到這裡也有一個ShowMsg的方法,這個方法是重寫瞭基類的ShowMsg方法哦,不管基類的方法是通過內部定義的還是外部定義的,這裡都可以將其重寫,而通過外部prototype來進行重寫的話就隻能重寫基類通過prototype來聲明的方法瞭,比如基類中有一個ShowMsg2的方法,我想要修改它,而我通過prototype來進行修改,如下:
//最後發現這裡這一句話是可要可不要的哦
Man.prototype = new Human();
//這裡為重寫基類的外部方法,但是這裡並不能更改基類的內部方法
//如基類內部有一個方法叫ShowMsg2,但是這裡這個重寫方法並不能
//讓基類的這個方法生效,
Man.prototype.ShowMsg2 = function () {
alert(this.age.toString() + this.name + this.sex);
}
這裡並不能將基類的ShowMsg2重寫的,所以這種重寫是錯誤的,隻能通過派生類的內部進行聲明重寫才能成功!
但是基類有一個外部聲明的方法叫ShowMsg對不,在這裡我們是可以通過派生類的prototype來進行重寫的,如下:
//這裡為重寫基類的外部方法ShowMsg,這裡是可以重寫的,但是請註意,因為在Man的類內部
//已經聲明瞭一個ShowMsg方法,所以這裡的重寫ShowMsg是無效的,在調用方法的時候,他不
//會執行這裡的這個ShowMsg方法,但是會執行派生類內部聲明的ShowMsg方法,這就是派生類
//繼承基類,並修改基類方法的方式瞭
Man.prototype.ShowMsg = function () {
alert(this.name + this.age.toString() + this.sex);
}
但是朋友們要註意瞭,如果我們在派生類裡面對這個ShowMsg這個方法進行瞭聲明的話,那麼這裡的這個重寫方法也是不會有任何作用的!要特別註意!
OK!到這裡也就基本完成瞭簡單的說明!有不到之處請多多見諒!
本文出自 “Laputaliya” 博客