js面向對象之prototype使用

1.prototype屬性在js中模擬了父類的角色,在js中體現面向對象的思想,prototype屬性是非常關鍵。

2.你現在就要搞清什麼事類變量、類方法、實例變量、實例方法。

3.現在你要理解this是指向類實例對象,prototype呢?

4.new操作符實例化一個對象的過程,js首先創建一個空的對象,然後這個對象被new後面的方法this關鍵字引用,然後方法對象通過操作符this,就給這個新創建的對象相應的賦予了屬性。

function Person(name,age){

this.name = name;

this.age =age;

}

var per = new Person("dexter",23)

5.不知道了怎麼說了,我也是看這寫例子就明白了什麼prototype的

例子一

function Person(name,sex)

{this.name=name;this.sex=sex;}

Person.prototype.age=12;

Person.prototype.print=function(){alert(this.name+"_"+this.sex+"_"+this.age);};

var p1 = new Person("name1","male");

var p2=new Person("name2","male");

p1.print();//name1_male_12

p2.print();//name2_male_12

Person.prototype.age=18;

p1.print();//name1_male_18

p2.print();//name2_male_18

 

這裏的關鍵就是屬性age好好感受體會一下

prototype對象模擬了一個超類的效果,你會明白什麼是超類的。

 

 

實例二

function Person(name,sex){this.name=name;this.sex=sex;}

Person.prototype.age=12;

Person.ptototype.print=function(){alert(this.name+"_"+this.sex+"_"+this.age);}

var p1=new Person("name1","male"); //p1的age屬性繼承了Person類的父類(即prototype對象)

var p2=new Person("name2","male");

p1.print();//name1_male_12

p2.print();//name2_male_12

 

p1.age=34 //改變p1實例的age屬性

p1.print();//name1_male_34

p2.print();//name2_male_12

Person.prototype.age=22;//改變Person類的超類的age屬性

p1.print();//name1_male_34(p1的age屬性沒有隨着prototype屬性的改變而改變)

p2.print();//name2_male_22(p2的age屬性發生了改變)

p1.print()=function(){alert("i am p1")};

p1.print();//I am p1(p1的方法發生了改變)

p2.print();//name2_male_22(p2的方法並沒有改變)

 

Person.prototype.print=function(){alert("new print method")};//改變超類的方法

p1.print();//I am p1(p1的print方法仍舊是自己的方法 )

p2.print();//newprint method(p2的print方法隨着超類的方法改變而改變)

 

js中對象的prototype屬性相當於java中的static變量,可以被這個類下的所有對象公用。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章