面向对象之继承

继上篇博客 https://www.cnblogs.com/qianqian-it/p/9526634.html 简单介绍了有关call和apply的联系和区别之后,接下来我们来共同学习一下面向对象的三个基本特征之一继承

1  首先来分析一下什么是继承

  继承通俗的来说,就是子类继承了父累的属性和方法,同时子类也能覆盖于父类相同的属性和方法

2.继承的几种方式

  一  .构造函数继承

无参数传递
<script type="text/javascript">    function Monkey(){ this.type="猴子"    }    function Majic_monkey(){ Monkey.call(this); this.skill="法术"    }    var wokong=new Majic_monkey();
    //再没有继承的情况下,
wokong.type为undefind
     alert(wokong.type); 
   alert(wokong.skill);

</script>
//弹出结果:猴子
法术

 

有参数传递
<script type="text/javascript"> function Monkey(name,skill){ this.name=name; this.skill=skill; } function Majic_monkey(){ Monkey.call(this,"小米","杀人"); this.tool="大刀" } var people=new Majic_monkey(); alert(people.name+"使用了"+people.tool+""+people.skill) </script>
//弹出结果:小米使用了大刀杀人


二   原型链继承

    function Monkey(){}
    Monkey.prototype.name="猴子";
    Monkey.prototype.skill="偷桃";
    Monkey.prototype.fun=function(){
        alert(this.name+this.skill+"很开心");
    }

    function Majic_monkey(){};
    Majic_monkey.prototype=new Monkey();
//将Majic_monkey实例指向了Monkey,Majic_monkey可以继承Monkey的属性和方法,同时也可覆盖Monkey的属性和方法 Majic_monkey.prototype.name
="孙悟空"; var wokong=new Majic_monkey(); alert(wokong.name); alert(wokong.skill) wokong.fun()
结果:



原型链继承只能是单继承,如果再Majic_monkey继承两个一个父类,则以最后一个父类为主,代码演示如下

  

  
function Monkey(){} Monkey.prototype.name="猴子"; Monkey.prototype.skill="偷桃"; Monkey.prototype.fun=function(){ alert(this.name+this.skill+"很开心"); } function AA(){} AA.prototype={ name:"小鱼", skill:"吐泡泡", fun:function(){ alert(this.name+this.skill+"很开心"); } } function Majic_monkey(){}; Majic_monkey.prototype=new Monkey();//继续了Monkey Majic_monkey.prototype=new AA();//继承了AA var wokong=new Majic_monkey(); alert(wokong.name); alert(wokong.skill) wokong.fun()

结果



 

//原型链不能继承多个类,会被覆盖

 

posted on 2018-08-24 10:25 xu-qianqian 阅读() 评论() 编辑 收藏

版权声明:本文为qianqian-it原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/qianqian-it/p/9528254.html