JS中的继承

什么是继承?

1、继承是与 构造函数 相关的应用
2、是指,让一个构造函数去继承另一个构造函数的属性和方法
3、继承是发生在两个构造函数之间的

es5中有几种常见的继承方法分别是:

  1. 原型的继承
  2. 构造函数的继承
  3. 混合继承(组合)
原型继承
			function Parent(){
			    this.name = "parent";
			}
			Parent.prototype.show = function(){
			    console.log("哈哈哈");
			}
			
			
			function Child(){}

			for(let i in Parent.prototype){
			    Child.prototype[i] = Parent.prototype[i];
			}
			
			let p = new Child();
			p.show(); //哈哈哈

这里我们写了一个“ show ”方法在这个Parent函数里,下面的Child函数里是没有这个“ show ”方法的,但最后我们执行的时候是可以打印出’哈哈哈‘的,这里就是利用了原型继承把Parent里面的方法拷贝给了Child,让Child可以使用Parent里面所有的方法

借助构造函数继承
function Parent(s){
			    this.skill = s;
			}
			function Child(n){
			    Parent.call(this,n);
			}
			let c = new Child("哈哈哈");
			console.log(c.skill); //哈哈哈

这里是利用call来改变构造函数中this指向的方法来实现继承的。但是,这样只能继承构造函数内部的属性或方法,不能继承原型身上的属性或方法

混合继承
function Parent(s){
			    this.skill = s;
			}
			Parent.prototype.show = function(){
			    console.log(this.skill); 
			}
			
			function Child(s){
			    Parent.call(this, s); //构造函数继承
			}
			for(let i in Parent.prototype){  //原型继承
			    Child.prototype[i] = Parent.prototype[i];
			}
			let p = new Child("哈哈哈");
			p.show();

混合继承就是构造函数继承+原型继承,这样写起来有一点复杂,既可以继承构造函数,又可以继承原型

ES6class继承

上面写的这三种方法都是属于ES5的,下面写一种ES6的继承方法:

class Parent{
			    constructor(s){
			        this.skill = s;
			    }
			    show(){
			        console.log(this.skill);
			    }
			}
			class Child extends Parent{
			    constructor(s){
			        super(s);
			    }
			}
			let p = new Parent("哈哈哈");
			p.show();

ES6中有专门的语法继承,如上面所示,使用extends关键字,在里面再写一个super函数接受参数就直接继承了,并且这种方法将原型继承和构造函数继承都继承了,就等于是将混合继承封装成了这种方法

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值