• 技术文章 >web前端 >前端问答

    es5和es6的继承有什么区别

    长期闲置长期闲置2022-03-30 16:52:23原创161

    es5和es6继承的区别是:es5是先创建子类,实例化父类并添加到子类this中实现继承;而es6是先创建父类,实例化子集中通过调用super方法访问父类后,通过修改this实现继承。

    本教程操作环境:windows10系统、ECMAScript 6.0版、Dell G3电脑。

    es5和es6的继承有什么区别

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

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

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

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

    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继承最大的区别就是在于:

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

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

    【相关推荐:javascript视频教程web前端

    以上就是es5和es6的继承有什么区别的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:es6 es5
    上一篇:es6中promise有什么用 下一篇:es6箭头函数是什么意思
    Web大前端开发直播班

    相关文章推荐

    • assign是es6方法吗• es6怎么判断数组是否有某一项值• es6怎么把字符串转化为对象• es6怎么判断对象key是否存在• es6新增的遍历方法有哪些

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网