1. 程式人生 > >js中的prototype

js中的prototype

每個函式是一個物件,它們對應的類就是function,每個函式物件都具有一個子物件prototype(表示該函式的原型),prototype表示了一個類的屬性的集合。當通過new來生成一個類的物件時,prototype物件的屬性就會成為例項化物件的屬性。 下面以一個例子來介紹prototype的應用,程式碼如下:

<script language="javascript">
//定義一個空類
function HelloClass(){
}
//對類的prototype物件進行修改,增加方法method
HelloClass.prototype.method=function(){
alert
("prototype測試"); } var obj=new HelloClass(); //建立類HelloClass的例項 obj.method(); //呼叫obj的method方法 </script>

當用new建立一個物件時,prototype物件的屬性將自動賦給所建立的物件,例如:

<script language="javascript">
//定義一個只有一個屬性的類
function HelloClass(){
this.name="javakc";
}
//使用函式的prototype屬性給類定義新屬性
HelloClass.prototype.showName=function
(){ alert(this.name); } var obj=new HelloClass(); //建立類HelloClass的一個例項 //呼叫通過prototype原型物件定義的showName方法 obj.showName(); </script>

利用prototype實現繼承

<script language="javascript">
function HelloClass(){
//構造方法
}
function HelloSubClass(){
//構造方法
}
HelloSubClass.prototype=HelloClass.prototype;
HelloSubClass.
prototype.Propertys="name"; HelloSubClass.prototype.subMethods=function(){ //方法實現程式碼 alert("in Methods"); } var obj=new HelloSubClass(); obj.subMethods(); </script>

在以上的程式碼中,首先是HelloSubClass具有了和HelloClass一樣的prototype,如果不考慮構造方法,則兩個類是等價的。隨後,又通過prototype給HelloSubClass賦予了額外的屬性和方法,所以HelloSubClass是在HelloClass的基礎上增加了新的屬性和方法,從而實現了類的繼承。