在物件導向的語言中,我們使用類來建立一個自訂對象。然而JavaScript中所有事物都是對象,那麼用什麼辦法來建立自訂對象呢?
這就需要引入另外一個概念 - 原型(prototype),我們可以簡單的把prototype看做是一個模版,新建立的自訂對象都是這個模版(prototype)的一個拷貝 (實際上不是拷貝而是連結,只不過這種連結是不可見,給人們的感覺好像是拷貝)。
讓我們看一下通過prototype建立自訂對象的一個例子:
//建構函式function Life(name,type){ this.name=name; this.type = type;}//life的原型,原型中的屬性可以被自訂對象引用life.prototype = { getName:function(){ alert(this.name); }, getType:function(){ alert(this.type); }}
執行個體化類的代碼:
var people = new Life("張三","人"); people.getName();var cat = new Life("八路","貓"); cat.getType();
當var people = new life("張三","人"); 執行時:
1、建立一個Null 物件(new Object())
2、連結life.prototype中的屬性到這個Null 物件
3、將這個對象通過this關鍵詞傳遞到建構函式中並執行建構函式
4、賦值給變數people
如何在javascript中實現簡單的繼承呢?
下面的例子將建立一個類test,它從Life繼承了原型prototype中的所有屬性
function Test(name,type,testId){ this.name = name; this.type = type; this.id = testId; } //創一個Life執行個體,將Test的原型指向它。Life的執行個體可以調用Life的屬性和方法,所以Test的原型也可以調用。
Test.prototype = new Life(); Test.prototype.getId = function(){ alert(this.id); } var t = new Test('樹',"植物",'1111'); t.getName(); t.getId();