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變量,可以被這個類下的所有對象公用。