面向对象之继承
面向对象之继承
继上篇博客 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 阅读(…) 评论(…) 编辑 收藏