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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值