日期:2014-05-16  浏览次数:20402 次

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变量,可以被这个类下的所有对象公用。

?

?

?