温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

es6继承和es5继承有什么区别

发布时间:2021-09-05 17:30:10 来源:亿速云 阅读:123 作者:小新 栏目:web开发

这篇文章给大家分享的是有关es6继承和es5继承有什么区别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

es5和es6继承的区别: ES5的继承是通过原型或构造函数机制实现的;它先创建子类,再实例化父类并添加到子类this中。 ES6先创建父类,再实例化子集中通过调用super方法访问父级后,再通过修改this实现继承。

本教程操作环境:windows7系统、ECMAScript 5&&ECMAScript 6版、Dell G3电脑。

es6继承和es5继承的区别

  • ES5的继承实质上是先创建子类的实例对象,然后再将父类的方法添加到this上(Parent.apply(this)).

  • ES6的继承机制完全不同,实质上是先创建父类的实例对象this(所以必须先调用父类的super()方法),然后再用子类的构造函数修改this。

  • ES5的继承是通过原型或构造函数机制来实现。

  • ES6通过class关键字定义类,里面有构造方法,类之间通过extends关键字实现继承。子类必须在constructor方法中调用super方法,否则新建实例报错。因为子类没有自己的this对象,而是继承了父类的this对象,然后对其进行加工。如果不调用super方法,子类得不到this对象。

注意super关键字指代父类的实例,即父类的this对象。

注意:在子类构造函数中,调用super后,才可使用this关键字,否则报错。

1、在es5中的继承:

	function parent(a,b){
	    this a = a;
	    this b = b;
	}
	function child(c){
	    this c = c
	};

通过子集去继承父级:

parent.call(child,1,2)

而去看call的底层方法可知,继承的过程是通过prototype属性

child.prototype = new parent(1,2);

由此可知,ES5继承的实质是先创建了子类元素child的的实例对象,然后再把父类元素parent的原型对象中的属性赋值给子类元素child的实例对象里面,从而实现继承

2、ES6中的继承

在传统JS中,生成对象是通过创建构造函数,然后定义生成对象

function parent(a,b){
    this.a = a;
    this.b = b;
}

然后通过prototype增加对应所需方法或属性

parent.prototype.methods = function(){
    return 'this is test methods';
}
parent.prototype.attr = 'this is test attr‘;

而ES6中引入了类的概念,也就是class。通过关键词class去定义对象。

class是个关键词,语言糖,这样能更清晰的读懂所创建的对象,

通过属性constructor来接收控制方法传入的参数,如果不写这个属性,默认是没有参数的

class parent{
    curstructor(a,b){
        this.a = a;
        this.b = b;
    }
}

ES6中的继承是基于class类之间继承的。通过关键词extends实现。

通过super实例化调用父类

	class parent{
	  constructor(a,b){
	    this.a = a;
	    this.b = b;
	  }
	  parentMethods(){
	    return this.a + this.b
	  }
	}
	class child extends parent{
	  constructor(a,b,c){
	    super(a,b);
	    this.c = c;
	  }
	  childMethods(){
	    return this.c + ',' + super.parentMethods()
	  }
	}
	const point = new child(1,2,3);
	alert(point.childMethods());

上面的代码,是一套简单的ES6父子类继承。

相信已经看出来了,虽明显的区别就是在于ES6中,激活父组件的是super方法,而不是新建实例化,也就是说,父类的实例对象是先创建出来的,调用后,再去修改子类的构造函数中的this完善原型对象。

总结:

ES5和ES6继承最大的区别就是在于:

  • ES5先创建子类,在实例化父类并添加到子类this中

  • ES6先创建父类,在实例化子集中通过调用super方法访问父级后,在通过修改this实现继承

感谢各位的阅读!关于“es6继承和es5继承有什么区别”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI