JavaScript面向对象------继承

javascript面向对象继承的三种方法:

<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" onclick="first()">FirstMethod</button><br />
    
<button validationgroup="SecondMethod" onclick="second()">SecondMethod
    
</button><br />
    
<button value="ThirdMethod" onclick="third()">ThirdMethod</button>
    
</div>
    
</form>
</body>
</html>
Tag标签: javascript,继承
posted @ 2008-04-29 09:48 镜涛 阅读(1702) 评论(16)  编辑 收藏 所属分类: AJAX

  回复  引用  查看    
#1楼 2008-04-29 10:11 | 李战      

  回复  引用  查看    
#2楼 2008-04-29 10:28 | EverGreen      
不错
  回复  引用  查看    
#4楼 2008-04-29 13:50 | new 维生素C.net()      
mp.SaySex();//执行结果Man
//可以看到ManPerson很好的继承了Person
怎么是Man呢? 应该是NONE
  回复  引用  查看    
#5楼 2008-04-29 14:41 | mrfangzheng      
JavaScript为什么不引入class关键字呢? 用个function来模拟多累啊
  回复  引用  查看    
#6楼 2008-04-29 17:56 | charry      
学习了
  回复  引用  查看    
#7楼 2008-04-29 18:26 | 留恋星空      
看看
  回复  引用  查看    
#8楼 [楼主]2008-04-30 08:51 | 镜涛      
@new 维生素C.net()
呵呵,打错了。不好意思!谢谢提醒
  回复  引用  查看    
#9楼 [楼主]2008-04-30 08:52 | 镜涛      
@mrfangzheng
呵呵,没办法啊!
  回复  引用    
#10楼 2008-04-30 08:58 | 入江纱绫 [未注册用户]
--引用--------------------------------------------------
李战: <img src="http://www.cnblogs.com/Emoticons/yoyocici/223852199.gif" alt="" /><img src="../../Emoticons/yoyocici/223852199.gif" alt="" />



  回复  引用  查看    
#11楼 2008-04-30 13:14 | romce      
学习了o(∩_∩)o...
  回复  引用  查看    
#12楼 2008-04-30 18:39 | SPARON      
还有一种更好的实现继承的方法,通过CALL来实现。

  回复  引用  查看    
#13楼 [楼主]2008-05-01 10:13 | 镜涛      
@SPARON
恩,Call和Apply都可以实现继承。只不过参数不同而已。一个是要求array 一个是param 序列。呵呵
  回复  引用    
#14楼 2008-05-02 14:25 | cxxx [未注册用户]
恩,不错
  回复  引用    
#15楼 2008-05-04 19:48 | 入江纱绫 [未注册用户]
mark!
  回复  引用  查看    
#16楼 2008-05-09 21:11 | WGforward      
学习中》。。。。