日期:2014-05-16 浏览次数:20468 次
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变量,可以被这个类下的所有对象公用。
?
?
?