<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>Untitled Page</title> <script language="javascript" type="text/javascript"> //基类
function Person() { this.Name="Person"; this.Sex="NONE"; this.Age="?"; this.SayName=function(){alert(this.Name);}; this.SaySex=function(){alert(this.Sex);}; this.SayAge=function(){alert(this.Age);}; } //子类 function ManPerson() { this.Name="ManPerson"; this.Sex="Man"; this.Age="20" Person.apply(this);//执行该语句时会调用Person中的构造器,先前赋值的ManPerson,Man,20就失去作用了,所以这句话 //要放在this.Name="ManPerson";之前才能即继承Person的方法,又不会覆盖我们的赋值操作。 }
//第一种方法 function first(){ var p=new Person(); alert("Name:"+p.Name+" Sex:"+p.Sex+" Age:"+p.Age);//执行结果为Name:Person Sex:NONE Age:? p.SayName();//执行结果Person var mp=new ManPerson(); alert("Name:"+mp.Name+" Sex:"+mp.Sex+" Age:"+mp.Age);//apply在赋值后结果为:Name:Person Sex:NONE Age:? //在赋值前结果为:Name:ManPerson Sex:Man Age:20 mp.SaySex();//执行结果Man //可以看到ManPerson很好的继承了Person }
//第二种方法 function second(){ for(pro in Person) { ManPerson[pro]=Person[pro]; } var p=new Person(); alert("Name:"+p.Name+" Sex:"+p.Sex+" Age:"+p.Age);//执行结果为Name:Person Sex:NONE Age:? p.SayName();//执行结果Person var mp=new ManPerson(); alert("Name:"+mp.Name+" Sex:"+mp.Sex+" Age:"+mp.Age);//执行结果为Name:Person Sex:NONE Age:? mp.SaySex();//执行结果NONE mp.Name="ManPerson"; mp.SayName();//执行结果:ManPerson //可以看到ManPerson继承了Person的SayName }
function third(){ //第三种方法 ManPerson.prototype=Person.prototype; var mmp=new ManPerson(); mmp.SayName();//执行结果:Person mmp.Name="ManPerson"; mmp.SayName();//执行结果:ManPerson //ManPerson继承了Person的方法 } </script></head><body> <form id="form1" runat="server"> <div> <button value="FirstMethod" οnclick="first()">FirstMethod</button><br /> <button validationgroup="SecondMethod" οnclick="second()">SecondMethod </button><br /> <button value="ThirdMethod" οnclick="third()">ThirdMethod</button> </div> </form></body></html>