欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JS中的多种继承方式(包含ES6)

程序员文章站 2022-06-19 17:07:42
为了让有JAVA基础的小伙伴更直观的看到区别简单描述一下JS中的继承、方法重载跟JAVA中的继承、方法重载区别**JS继承:**js中的继承有多种方式,大体上就是两种,一种是基于原型链覆盖的形式、一种是对象冒充也就是通过改变this指向。支持多继承,通过原型链可以一直往上找。**JAVA继承:**java中的继承是一个类继承了父类以后,它就不能再继承别的类,只支持单继承。但是java中存在接口,接口从本质上来说可以更好的代替继承,可以把需要的方法定义在接口中,让具体的类实现接口中的功能。**JS....
  • 为了让有JAVA基础的小伙伴更直观的看到区别简单描述一下JS中的继承、方法重载跟JAVA中的继承、方法重载区别
  • JS继承:

js中的继承有多种方式,大体上就是两种,一种是基于原型链覆盖的形式、一种是对象冒充也就是通过改变this指向。支持多继承,通过原型链可以一直往上找。

  • JAVA继承:

java中的继承是一个类继承了父类以后,它就不能再继承别的类,只支持单继承。但是java中存在接口,接口从本质上来说可以更好的代替继承,可以把需要的方法定义在接口中,让具体的类实现接口中的功能。

  • JS重载:

js中不存在重载,相同名字的函数由于js底层原理(变量提升)会导致相同名字的函数覆盖。

  • JAVA重载:

java中重载是可以定义相同名字的接口(方法)参数不同、参数个数不同、返回值不同实现不同的功能。

  • JS第一种继承方案:原型继承(子类原型=父类的实例)
function Parent(){
	this.x = 100;
}
Parent.prototype.getX = function getX(){
	return this.x;
}
function Child(){
	this.y = 200;
}
//原型继承 Child通过原型链可以找到Parent中的私有属性和Parent.prototype中的公有属性
Child.prototype = new Parent;
Child.prototype.getY = function getY(){
	return this.y;
}
var child1 = new Child;

JS中的多种继承方式(包含ES6)

原型继承特点:
1.父类中私有和公有的属性方法,最后都变为子类实例公有的;
2.和其它语言不同的是,原型继承并不会把父类的属性方法 copy给子类,而是让子类实例基于__proto__原型链上找到自己定义的属性和方法“指向/查找”方式的;
3.修改子类原型中的内容,内容修改后,对子类的其他实例有影响,但是对父类的实例不会有影响。直接修改父类的原型,不仅影响父类的实例,也会影响子类的实例。

  • JS第二种继承方案,call继承:
function Parent(){
	this.x = 100;
}
Parent.prototype.getX = function getX(){
	return this.x;
}
function Child(){
	//在子类构造函数中,把父类当做普通方法执行(没有父类实例,父类原型上的公共属性方法就和它没关系了)"拷贝式"
	Parent.call(this);
	this.y = 200;
}
Child.prototype.getY = function getY(){
	return this.y;
}
var child1 = new Child;

特点:
call继承,只能继承父类中私有的,不能继承父类*有的

  • JS第三种继承方案,寄生组合式继承(call继承 + 另类原型继承):
function Parent(){
	this.x = 100;
}
Parent.prototype.getX = function getX(){
	return this.x;
}
function Child(){
	Parent.call(this);
	this.y = 200;
}
//IE浏览器下不支持操作__proto__
//Child.prototype.__proto__=Parent.prototype;
//兼容性写法 Child原型指向一个空对象,空对象的原型指向的Parent的原型
Child.prototype = Object.create(Parent.prototype);
Child.prototype.contructor=Child;
Child.prototype.getY = function getY(){
	return this.y;
}
var child1 = new Child;
  • ES6中的类和继承,extends Parent:

ES6中创建的就是类,不能当做普通函数执行,只能new执行。继承后一定要在constructor第一行加上super();

class Parent{
	constructor(){
		this.x=100;
	}
	getX(){
		retrun this.x;
	}
}
class Child extends Parent{
	constructor(){
		super();//类似于call继承super(100,200) 相当于把Parent中的constructor执行,传递了100和200
		this.y=200;
	}
	getY(){
		retrun this.y;
	}
}

本文地址:https://blog.csdn.net/Lele___/article/details/111596566

相关标签: 前端 javascript